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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論