C#SMTP與POP3應(yīng)用編程.ppt_第1頁(yè)
C#SMTP與POP3應(yīng)用編程.ppt_第2頁(yè)
C#SMTP與POP3應(yīng)用編程.ppt_第3頁(yè)
C#SMTP與POP3應(yīng)用編程.ppt_第4頁(yè)
C#SMTP與POP3應(yīng)用編程.ppt_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第5章 SMTP與POP3應(yīng)用編程,5.1 通過(guò)應(yīng)用程序發(fā)送電子郵件 5.2 利用同步TCP接收電子郵件,電子郵件是通過(guò)SMTP服務(wù)器進(jìn)行發(fā)送的,SMTP是英文Simple Mail Transfer Protocol的縮寫(xiě),意為簡(jiǎn)單郵件傳輸協(xié)議,默認(rèn)端口為25。使用SMTP協(xié)議發(fā)送郵件時(shí),有兩種形式: 1) 客戶端可以使用匿名方式發(fā)送郵件,不使用客戶端認(rèn)證,這種方式即是一般的SMTP協(xié)議 2) 客戶端必須提供用戶名和密碼,這種方式稱為ESMTP協(xié)議,即Extended SMTP,或者叫擴(kuò)展SMTP。 。 3) ESMTP與SMTP的區(qū)別除了是否需要認(rèn)證以外,其他均相同。為了避免或者減少垃圾郵

2、件,目前大部分SMTP郵件服務(wù)器一般均采用用戶名密碼認(rèn)證的方式。,5.1 通過(guò)應(yīng)用程序發(fā)送電子郵件,在SMTP協(xié)議中,電子郵件由三部分組成,信封、首部和正文。 1)信封 信封包括發(fā)信人的郵件地址和接收人的郵件地址,用兩條SMTP命令指明。 MAIL FROM:,告訴SMTP服務(wù)器發(fā)信人的地址。 RCPT TO:,告訴SMTP服務(wù)器收信人地址。,5.1 通過(guò)應(yīng)用程序發(fā)送電子郵件(續(xù)),5.1 通過(guò)應(yīng)用程序發(fā)送電子郵件(續(xù)),2)首部 首部中常用命令: FROM:,表明郵件發(fā)送者是誰(shuí)。 TO:,表明郵件接收者是誰(shuí)。 SUBJECT:,表明郵件的主題。 DATE:,表明發(fā)郵件的時(shí)間。 REPLY-T

3、O:,表明郵件的回復(fù)地址。 Content-Type:,表明郵件包含文本、HTML超文本和附件的哪些類(lèi)型。 X-Priority:,表明郵件的發(fā)送優(yōu)先級(jí)。 MIME-Version:,MIME的意思是Multipurpose Internet Mail Extensions,即多用途Internet郵件擴(kuò)展標(biāo)準(zhǔn),它對(duì)傳輸內(nèi)容的消息、附件及其他的內(nèi)容定義了格式。,5.1 通過(guò)應(yīng)用程序發(fā)送電子郵件(續(xù)),3)正文 正文是郵件的內(nèi)容。首部以一個(gè)空行結(jié)束,再下面就是正文部分。 4) 結(jié)束符號(hào) 郵件以“.”結(jié)束。,5.1 通過(guò)應(yīng)用程序發(fā)送電子郵件(續(xù)),對(duì)于運(yùn)行在沒(méi)有專(zhuān)用郵件服務(wù)器的大多數(shù)客戶程序而言,

4、向SMTP服務(wù)器發(fā)送郵件需要提供用戶名和密碼,服務(wù)器驗(yàn)證成功后,才能進(jìn)行發(fā)送或接收。因此在應(yīng)用程序中發(fā)送郵件,需要使用下面幾個(gè)類(lèi): 1) System.Net命名空間下的NetworkCredential類(lèi) 該類(lèi)用于提供客戶端身份驗(yàn)證機(jī)制的憑據(jù)。其中包括標(biāo)準(zhǔn)Internet身份驗(yàn)證方法(基本、簡(jiǎn)要、協(xié)商、NTLM和Kerberos身份驗(yàn)證)以及可以創(chuàng)建的自定義方法。在郵件發(fā)送中,我們需要使用這個(gè)類(lèi)提供SMTP服務(wù)器需要的用戶名和密碼,用法為: NetworkCredential myCredentials = new NetworkCredential(發(fā)件人郵件地址, 密碼);,5.1 通過(guò)

5、應(yīng)用程序發(fā)送電子郵件(續(xù)),2) System.Net.Mail命名空間下的MailAddress類(lèi) 該類(lèi)用于提供發(fā)件人和收件人的郵件地址,常用形式為: MailAddress from = new MailAddress(發(fā)件人郵件地址); MailAddress to = new MailAddress(收件人郵件地址);,5.1 通過(guò)應(yīng)用程序發(fā)送電子郵件(續(xù)),3) System.Net.Mail命名空間下的MailMessage類(lèi) 該類(lèi)用于提供郵件的信息,包括主題、內(nèi)容、附件、信息類(lèi)型等,常用形式為: MailMessage message = new MailMessage(from

6、, to); message.Subject = 主題; message.SubjectEncoding = System.Text.Encoding.UTF8; message.Body = 郵件內(nèi)容; message.BodyEncoding = System.Text.Encoding.UTF8;,5.1 通過(guò)應(yīng)用程序發(fā)送電子郵件(續(xù)),4) System.Net.Mail命名空間下的Attachment類(lèi) 該類(lèi)用于提供附件對(duì)象,常用形式為: Attachment attachFile = new Attachment(文件名); message.Attachments.Add(atta

7、chFile); 5) SmtpClient類(lèi) 該類(lèi)用于發(fā)送郵件,常用形式為: SmtpClient client = new SmtpClient(郵件服務(wù)器地址); client.Send(message);,5.2 利用同步TCP接收電子郵件,收發(fā)郵件使用了兩種協(xié)議,一種是TCP協(xié)議,用于收發(fā)數(shù)據(jù);另一種是POP3協(xié)議,用于解析傳送的命令。 接收電子郵件主要是利用POP(Post Office Protocol)協(xié)議,現(xiàn)在常用的是第三版,簡(jiǎn)稱為POP3,默認(rèn)端口為110。 通過(guò)POP3協(xié)議,客戶機(jī)登錄到服務(wù)器后,可以對(duì)自己的郵件進(jìn)行刪除或下載,下載后,電子郵件客戶端軟件就可以在本地對(duì)郵件

8、進(jìn)行處理。 1. POP3工作原理 客戶端軟件讀取郵件之前,需要事先與服務(wù)器建立TCP連接。連接成功后,POP3服務(wù)器會(huì)向該客戶端發(fā)送確認(rèn)消息,客戶端等待服務(wù)器響應(yīng),并處理接收的信息,然后再接著發(fā)送下一個(gè)命令,如此往復(fù)多次,一直持續(xù)到連接終止。 這個(gè)過(guò)程經(jīng)歷了三個(gè)狀態(tài):授權(quán)狀態(tài)(AUTHORIZATION)、操作狀態(tài)(TRANSACTION)和更新?tīng)顟B(tài)(UPDATE)。,5.2 利用同步TCP接收電子郵件(續(xù)),2.POP3協(xié)議中的命令 每條命令均由命令和參數(shù)兩大部分組成,而且每條命令都以回車(chē)換行結(jié)束。命令和參數(shù)之間由空格間隔。 POP3服務(wù)器回送的響應(yīng)信息由一個(gè)狀態(tài)碼和一個(gè)可能跟有附加信息的

9、命令組成。所有響應(yīng)也以回車(chē)換行結(jié)束。狀態(tài)碼有兩種:“確定”(“+OK”)和“失敗”(“-ERR”)。 3.POP3協(xié)議工作的具體過(guò)程 假設(shè)用C表示客戶端(Client),S表示服務(wù)器端(Server)。 1) 授權(quán)狀態(tài) 客戶端首先與POP3服務(wù)器建立TCP連接,服務(wù)器接收后發(fā)送一個(gè)單行的確認(rèn)信息。此時(shí)POP3會(huì)話就進(jìn)入了授權(quán)狀態(tài)。在授權(quán)狀態(tài),客戶需要向服務(wù)器發(fā)送用戶名和密碼進(jìn)行確認(rèn),具體命令如下:,5.2 利用同步TCP接收電子郵件(續(xù)),發(fā)送用戶名。 語(yǔ)法形式:USER 功能:將客戶的用戶名發(fā)送到服務(wù)器。 服務(wù)器返回:+OK正確的用戶名;-ERR錯(cuò)誤的用戶名。 示例:C:USER S:+OK

10、 welcome on this server. 用戶名確認(rèn)成功后,需要輸入密碼。 語(yǔ)法形式:PASS 功能:將客戶的密碼發(fā)送給服務(wù)器。 服務(wù)器返回:+OK正確的用戶名;-OK錯(cuò)誤的用戶名。 示例:C:PASS * S:+OK myname logged in at 19:04,5.2 利用同步TCP接收電子郵件(續(xù)),2) 操作狀態(tài) 授權(quán)成功后, POP3會(huì)話將進(jìn)入操作狀態(tài),客戶就可以執(zhí)行POP3命令進(jìn)行相應(yīng)的操作。對(duì)于每個(gè)命令,服務(wù)器都會(huì)返回應(yīng)答信息。下面是在操作狀態(tài)中使用的命令: STAT命令 語(yǔ)法形式:STAT 功能:從服務(wù)器中獲郵件總數(shù)和總字節(jié)數(shù)。 服務(wù)器返回:郵件總數(shù)和總字節(jié)數(shù)。

11、示例:C:STAT S:+OK 2 320 LIST命令 語(yǔ)法形式:LIST 功能:從服務(wù)中獲得郵件列表和大小。,5.2 利用同步TCP接收電子郵件(續(xù)),服務(wù)器返回:列出郵件列表和大小。 示例:C:LIST S:+OK 2 messages (320 octets) S:1 120 S:2 200 S: . RETR命令 語(yǔ)法形式:RETR 功能:從服務(wù)器中獲得一個(gè)郵件。 服務(wù)器返回:+OK成功;-ERR錯(cuò)誤。 示例:C: RETR 1 S:+OK 120 octets S: S: . 注意,這里的“.”是單獨(dú)發(fā)送的。,5.2 利用同步TCP接收電子郵件(續(xù)),DELE命令 語(yǔ)法形式:DEL

12、E 功能:服務(wù)器將郵件標(biāo)記為刪除,當(dāng)執(zhí)行QUIT命令時(shí)才真正刪除。 服務(wù)器返回:+OK成功;-ERR錯(cuò)誤。 示例:C:DELE 1 S:+OK 1 Deleted 3)更新?tīng)顟B(tài) 當(dāng)客戶在操作狀態(tài)下發(fā)送QUIT命令后,會(huì)話進(jìn)入更新?tīng)顟B(tài)。 QUIT命令 語(yǔ)法形式:QUIT 功能:關(guān)閉與服務(wù)器的連接。,5.2 利用同步TCP接收電子郵件(續(xù)),服務(wù)器返回:+OK;-ERR。 示例:C:QUIT S:+OK 然后服務(wù)器自動(dòng)斷開(kāi)與該客戶端的TCP連接。 2.郵件接收處理 這個(gè)例子中只需要編寫(xiě)客戶端程序,而不需要編寫(xiě)服務(wù)器端程序即可正常運(yùn)行。我們重點(diǎn)關(guān)心的是如何利用同步TCP發(fā)送和接收數(shù)據(jù)。 部分代碼,5

13、.2 利用同步TCP接收電子郵件(續(xù)),建立連接 int index = textBoxUser.Text.IndexOf(); /大部分pop3服務(wù)器都加前綴pop3.,這里僅獲取這種服務(wù)器 /對(duì)不以pop3.為前綴的這個(gè)例子未進(jìn)行處理 string pop3Server = pop3. + textBoxUser.Text.Substring(index + 1);,5.2 利用同步TCP接收電子郵件(續(xù)),/建立與POP3服務(wù)器的連接,使用默認(rèn)端口110 tcpClient = new TcpClient(pop3Server, 110); listBoxStatus.Items.Add

14、(與pop3服務(wù)器連接成功); /獲取 Networkstream對(duì)象,以便通過(guò)建立好的連接發(fā)送和接收數(shù)據(jù) networkStream = tcpClient.GetStream(); /得到讀對(duì)象,并查找字節(jié)順序標(biāo)記,防止顯示亂碼 sr = new StreamReader(networkStream); /得到寫(xiě)對(duì)象 sw = new StreamWriter(networkStream); /讀取服務(wù)器回送的連接信息 if (ReadDataFromServer() = null) return;,5.2 利用同步TCP接收電子郵件(續(xù)),/向服務(wù)器發(fā)送用戶名,請(qǐng)求確認(rèn) if (Send

15、DataToServer(USER + textBoxUser.Text) = false) return; if (ReadDataFromServer() = null) return; /向服務(wù)器發(fā)送密碼,請(qǐng)求確認(rèn) if (SendDataToServer(PASS + textBoxPassword.Text) = false) return; if (ReadDataFromServer() = null) return; /向服務(wù)器發(fā)送STAT命令,請(qǐng)求獲取郵件總數(shù)和總字節(jié)數(shù) if (SendDataToServer(LIST) = false) return; if (str = ReadDataFromServer() = null) return; 從網(wǎng)絡(luò)流中讀取服務(wù)器回送的信息,寫(xiě)入信息列表框 string str = null;,5.2 利用同步TCP接收

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論