一、目標描述
發送要求:
輸入:
1.對方E-Mail地址
2.smtp伺服器位址
3.username
4.password
5.郵件內文
6.標題(可選)
發送郵件內文。
接收要求:
輸入 :
1.pop3伺服器位址
2.username
3.password
檢索郵件清單,內送郵件本文。
二、問題描述
1. 如何用C#來發送郵件.
2. 如何用C#來實現基於POP3協議的郵件接收
三、解決方案
1. 郵件的發送
使用System.Net.Mail 命名空間中MailMessage 類和SmtpClient類發送郵件.此方法較簡單,不再鼇述.
2. 在郵件接收中
我主要用到了兩個類:TcpClient類和NetworkStream類。TcpClient類是運用C#進行網路編程的一個非常重要的類,它提供了通過網路連接、發送和接收資料的簡單方法,從而實現了網路編程的大大簡化。NetworkStream類實現通過網路通訊端發送和接收資料的標準.Net架構流機制,它支援對網路資料流的同步和非同步訪問,是實現網路通訊的重要組成部分
四、總結
通過此次練習, 在基於POP3協議的郵件接收時的工作流程為:
在用戶端串連伺服器成功後,伺服器會返回以下資訊:+OK…… 字元+OK是POP3協議的返回資訊。它的回應資訊不像SMTP協議那樣用豐富多變的數字表示,只有兩個:+OK或者-ERR。其中,+OK表示串連成功,而-ERR則表示串連失敗。
然後通過在用戶端輸入USER <使用者名稱> 該命令告訴伺服器你的使用者名稱。(註:有些伺服器會區分大小寫字母的)。 當伺服器返回+OK後,在用戶端再輸入PASS <口令> 伺服器返回+OK後,會返回一些郵箱的統計資訊,比如:+OK n message(s) [**** byte(s)] 不同的伺服器返回的資訊格式不太一樣,所以我們可以用STAT命令來查看郵箱的情況。STAT命令的回應中有兩個數字,分別表示郵件的數量和郵件的大小。 如果信箱裡有信,就可以用RETR命令來擷取郵件的本文。RETR命令的格式為: RETR <郵件編號> 如果返回結果第一行是+OK資訊,則表示成功。第二行起便是郵件的本文。最後一行和SMTP協議一樣,是一個單獨的英文句號,表示郵件的結尾部分,在讀取時使用Reader.ReadLine()來讀取,其中Reader為StringReader成員。 如果郵件通過POP3收取後可用DELE命令刪除郵箱中的郵件,否則你的郵箱就爆了。DELE命令的格式為: DELE <郵件編號> 如果刪錯了,可以用RSET命令來恢複所有已被刪除的郵件(前提時沒有退出系統)。所有操作完成後可通過輸入QUIT命令退出POP3伺服器了。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/mengyao/archive/2007/08/16/1746533.aspx