<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 基于ESMTP的電子郵件發(fā)送程序的設(shè)計與實現(xiàn)

    時間:2024-07-28 20:05:16 研究生論文 我要投稿
    • 相關(guān)推薦

    基于ESMTP的電子郵件發(fā)送程序的設(shè)計與實現(xiàn)

      摘 要:本文以VB.NET為開發(fā)平臺,利用Socket套接宇編程,實現(xiàn)了基于ESMTP的郵件發(fā)送程序。文中深入講解了ESMTP的原理及電子郵件發(fā)送程序的設(shè)計與實現(xiàn)方法。

    基于ESMTP的電子郵件發(fā)送程序的設(shè)計與實現(xiàn)

      關(guān)鍵詞:ESMTP,電子郵件,發(fā)送程序,VB.NET,Socke

      一、引言

      隨著Intemet/Intranet的迅猛發(fā)展,電子郵件(E—Mail)已成為因特網(wǎng)上非常流行、非常方便的通信方式。但是,隨之而來的是大量的廣告郵件和垃圾郵件的泛濫,為應(yīng)對這種情況,許多E—Mail服務(wù)商和ISP將它們的SMTP系統(tǒng)升級成了ESMTP系統(tǒng)。

      本文采用微軟最新的。NET技術(shù),以VB.NET為開發(fā)平臺,利用Socket套接字編程,開發(fā)了基于ESMTP協(xié)議的郵件發(fā)送程序,這里將對相關(guān)原理及具體設(shè)計進行討論。

      二、郵件傳輸協(xié)議

      1.ESMTP簡介所謂ESMTP(Extended SMTP),即擴展的簡單郵件傳輸協(xié)議,是郵件服務(wù)器系統(tǒng)為了限制非本系統(tǒng)的用戶利用本系統(tǒng)散發(fā)垃圾郵件等不當行為而開設(shè)的一項安全認證服務(wù)。在ESMTP服務(wù)器上,發(fā)送郵件需要對用戶的身份進行驗證。它與傳統(tǒng)的SMTP方式相比,多了一道用戶身份驗證手續(xù),此外,其郵件發(fā)送過程與傳統(tǒng)的SMTP方式一致。

      2.ESMTP的運行過程ESMTP的運行,首先要發(fā)送命令建立一個可靠的有序數(shù)據(jù)流傳輸通道(TCP連接),然后客戶機向服務(wù)器發(fā)送其它命令,然后根據(jù)服務(wù)器回送的響應(yīng)決定下一步操作,并最終實現(xiàn)郵件的傳送。整個郵件發(fā)送過程就是兩者之間進行信息交換的過程。

      一般地,郵件發(fā)送過程將依次發(fā)送如下命令并得到響應(yīng)(如表1)(以163為例):

      三、程序?qū)崿F(xiàn)我們以VB.NET為平臺,通過Socket套接字編程序來實現(xiàn)郵件發(fā)送功能。

      1.命名空間本文中主要使用了2個命名空間及2個類。

      (1)System.Net.Sockets命名空間System.Net.Sockets命名空間為需要嚴密控制同絡(luò)訪問的開發(fā)人員提供了Windows Sockets接口的托管實現(xiàn)。其中,定義了Socket類可用于實現(xiàn)發(fā)送郵件。該類的常用成員有。:

      ① 構(gòu)造函數(shù) Socket構(gòu)造函數(shù):用于初始化Socket類的新實例。

      ⑦ 方法

      (2)System.Net命名空間System.Net命名空間為多種協(xié)議提供了編程接口。

      (3)其他類System.Convet類:用于數(shù)據(jù)類型轉(zhuǎn)換;System.Text.Encoding類:表示數(shù)據(jù)編碼:

      2.程序設(shè)計為減少程序書寫量,可在窗口類之前使用以下語句導(dǎo)人命名空間及其中的類:

      Imports System Net.SocketsImports System.NetImports System.Text.EncodingImports System.Convert這樣,就可以直接弓I用其中的成員了。

      另外,窗口類中還要初始化Socket類:

      Public MySocket As New Socket一(Add ressFam y.InterNetwork,一SocketType.Stream.ProtocolType.Tcp)L 程序界面設(shè)計其中,7個文本框的Name屬性從上到下依次為:SMTPServ.

      el“ UserAccount UserPassword SenderAddress、ReceiverAddress EMailSubject、EmailContent。2個按鈕的Name屬性依次為:Send-Mail、QuitForm。

      (2)發(fā)送電子郵件程序程序中,首先把要發(fā)送的數(shù)據(jù)(包括郵件內(nèi)容和命令)存儲在變量SendData中,然后調(diào)用自定義的MySender函數(shù)發(fā)送出去:

      . rivate Sub SendMall_』=lick(ByVal sender As System.

      Object,ByVal e As System.EventArgs)Handles Send-Mall ClickDIm SendData As String, HostEndPoint As IPEndPoint,HostAddress As I PAdd ressTryHostAddress=Dns.Resolve(SMTPServer,Text)。AddressList(0)HOstEndPOint = New I PEndPoint(HostAddress,25)連接服務(wù)器MySocket.Connect(HostEndPoint)Catch ex As ExceptionMsgBox( 連接失敗 ):GoTo QuitSendEnd TryIf Not W ait( 220 )Then GoTo QuitSend建立會話連接SendData = SMTPServer.TextSendData = SendData.Substring(SendData Index0f( . ) + 1)SendData = EHLO + SendData + vbC rLfMySende r(SendData 1If Not Wait( 250 )Then GoTo QuitSend要求身份驗證SendData = AUTH LOGIN + vbCrLfMySender(SendData) .

      If Not W ait( 334 )Then GoTo QuitSend驗證用戶帳號SendData = TOBase64Strinq(ASCIIGetBytes(UserAccount.Text))+vbCrLfMySender(SendData)If Not W ait( 334 )Then GoTo QuitSend驗證用戶密碼SendData = TOBase64Strinq(ASCI1.

      GetBytes(Use rPassword.Text))+vbC rLfMySender(SendData)If Not W ait( 235 )Then GoTo QuitSend發(fā)件人地址SendData = MAlL FROM: +SenderAdd ress.Text + vbCrLfMySender(SendData)If Not W ait( 250 )Then GoTo QuitSend收件人地址SendData = RCPT TO: +ReceiverAdd ress.Text + vbC rLfMySender(SendData)If Not Wait《 250 )Then GoTo QuitSend請求發(fā)送數(shù)據(jù)SendData = DATA vbCrLfMySender(SendData)If Not Wait《 354 )Then GoTo QuitSend顯示發(fā)件人地址SendData = F rOm: +SenderAddress.Text + vbCrLf加上收件人地址SendData = SendData + To: +ReceiverAdd ress.Text + vbCrLf加上主題SendData =SendData + Subject: +EMailSubject.Text 4-vbCrLf加上郵件正文SendData = SendData + EMailContent Text加上郵件結(jié)束符SendData=vbCrLf+SendData + . + vbCrLfMySender《SendData)If Not W ait《 250 )Then GoTo QuitSend退出會話連接SendData = QUIT vbCrLfMySender(SendData)If Not W aitl 221 )Then GoTo QuitSendQuitSend: 關(guān)閉MySocket.Shutdown(SocketShutdown.

      Receive)MySocket.Close(】

      End Sub(3)自定義函數(shù)①數(shù)據(jù)發(fā)送程序程序會等待,直到Socket處于可寫狀態(tài)時,則將數(shù)據(jù)發(fā)送出去。

      Public Function MySender《ByVaI Data As String)Dim MyW riteBufer As Byte 1)MyW riteBuffer= ASC GetBytes《Data)lf MySocket.Poll(一1,SelectMode.

      SelectW rite)ThenMySocket.Send《MyW riteBuffer)End Function②等待應(yīng)答函數(shù)程序最多等待5O秒,直到Socket處于可讀狀態(tài)時,則讀取數(shù)據(jù),并與期待的應(yīng)答碼相比較。

      Public Function W ait l ByVal ResDOnseCOde As String) AsBooleanDim MyReadBufer(1 024)As ByteDim TotalStr As StringDim PreThreeW ord As StringMySocket.Receive《MyReadBuffer)If MySocket.Poll《50000,一SelectMode.SelectRead)ThenMySocket.Receive《MvReadBuffer)TotaIStr= ASCI1.GetString lMyReadBufer)PreTh reeWord=TotalStr.Substring(0 3)If PreThreeW ord <> ResDOnseCOde ThenRetu rn FalseRetu rn TrueEnd Function

      四、幾點說明(1)關(guān)于ESMTP中繼服務(wù)器設(shè)置目前,絕大多數(shù)郵件服務(wù)器都支持ESMTP,但是有些服務(wù)器僅支持通過Web頁面發(fā)送郵件,而不支持這種客戶端程序發(fā)送郵件。本文程序在smtp.163.eom測試發(fā)送成功。

      (2)關(guān)于程序的完整性本文利用Socket編程實現(xiàn)基于ESMTP的郵件發(fā)送功能,重在講解ESMTP的原理、運行過程,以及Socket的程序設(shè)計方法 因此,程序力求精簡。故尚有須補充之處:

      ①錯誤處理。比如:未對郵件地址輸入錯誤進行處理。

      ②提示信息。比如:缺乏郵件發(fā)送進度提示。

      在實用程序中,這些都是必需的,但由于篇幅所限,故在本文的郵件發(fā)送程序中將這部分省去,讀者可自行補充完整。

      五、結(jié)束語

      隨著電子郵件的普及,垃圾郵件等危害服務(wù)器正常運轉(zhuǎn)的行為也日益增多,因此,絕大多數(shù)服務(wù)器均采用ESMTP進行用戶身份認證。同時,也就需要客戶端軟件能夠完成身份認證工作。本文在VB.NET中利用套接字編程實現(xiàn)了此功能。

    【基于ESMTP的電子郵件發(fā)送程序的設(shè)計與實現(xiàn)】相關(guān)文章:

    基于Vxworks實時操作系統(tǒng)的串口通信程序設(shè)計與實現(xiàn)03-18

    基于PQRM的PACS系統(tǒng)設(shè)計與實現(xiàn)03-07

    基于Perl的DoS工具設(shè)計與實現(xiàn)03-10

    基于PCI總線的CAN卡的設(shè)計與實現(xiàn)03-18

    基于MVC模式的BBS系統(tǒng)設(shè)計與實現(xiàn)03-08

    基于ASP的網(wǎng)絡(luò)考試系統(tǒng)的設(shè)計與實現(xiàn)03-07

    基于FPGA的TS over lP的設(shè)計與實現(xiàn)03-21

    基于JSP的BBS設(shè)計與實現(xiàn)JSP+SQL03-08

    基于MX21的PMP系統(tǒng)的設(shè)計與實現(xiàn)11-22

    主站蜘蛛池模板: 国产精品久久毛片完整版| 国产精品白浆在线观看免费| 亚洲热线99精品视频| 国产精品久久久天天影视| 在线精品亚洲一区二区小说| 97久视频精品视频在线老司机| 亚洲色精品88色婷婷七月丁香| 91人妻人人澡人人爽人人精品| 人妻少妇乱子伦精品| 久久精品国产WWW456C0M| 久久精品这里热有精品| 精品一区二区三区在线观看视频| 日韩福利视频精品专区| www夜片内射视频日韩精品成人| 久久国产精品99精品国产| 欧洲精品一区二区三区在线观看| 欧美一区二区精品系列在线观看| 久久国产精品无码HDAV| 中文字幕无码精品亚洲资源网久久| 国产精品免费视频观看拍拍 | 漂亮人妻被黑人久久精品| 久久国产成人精品国产成人亚洲| 欧美精品福利视频| 6一12呦女精品| 国产精品兄妹在线观看麻豆 | 老司机69精品成免费视频| 69久久夜色精品国产69| 精品国产一区二区三区不卡| 午夜精品久久久久久99热| 亚洲国产精品一区第二页| 亚洲精品国产精品乱码不99| 亚洲欧美一级久久精品 | 午夜精品美女写真福利| 国产精品一区二区不卡| 国产福利视精品永久免费| 国产精品无码日韩欧| 久久精品国产亚洲av麻豆色欲| 久久丫精品国产亚洲av| 欧美精品videosse精子| 久久精品无码专区免费东京热 | 国产精品VIDEOSSEX久久发布|