C#基礎--基於POP3協議的郵件接收和基於STMP的郵件發送

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   使用   sp   

  最近在用outlook同步郵件。對郵件協議有一點興趣。於是就去收集了一些資料,學習了一下如何通過.net來實現郵件的收發。

  

     一:SMTP協議

     1.什麼是SMTP協議:

      SMTP目前已是事實上的在Internet傳輸E-Mail的標準,是一個相對簡單的基於文本的協議。在其之上指定了一條訊息的一個或多個接收者(在大多數情況下被確定是存在的),然後訊息文本就傳輸了。可以很簡單地通過Telnet程式來測試一個SMTP伺服器,SMTP使用TCP連接埠25。要為一個給定的網域名稱決定一個SMTP伺服器,需要使用MX(Mail eXchange)DNS。(來自百度百科)

 2.如何?:

      為了實現SMTP協議,.net提供了MailMessage類,用於儲存郵件資訊(包括主題,寄件者地址,收件者地址,附件,包括郵件的格式[文本,HTML...]。SmtpClient類來實現協議串連。StmpClient提供了stmp 和port兩個參數,有關協議和連接埠號碼是可以再網上查詢到的。常用郵箱連接埠號碼: STMP預設25.實現代碼如下:

        public static bool SendEmail()        {            try            {                MailMessage msg = new MailMessage();                msg.From = new MailAddress(fromEmailAddress); // 寄件者郵箱                msg.Subject = "來自小聰的郵件";                msg.Body = "今天吃飯了沒有呀,小強同學";                msg.BodyEncoding = System.Text.Encoding.Default;                msg.To.Add(toEmailAddress); //收件者地址,可以添加多個                SmtpClient client = new SmtpClient(smtp, port); // smtp = "smtp.qq.com"; port=25 QQ郵箱                client.Credentials = new System.Net.NetworkCredential(msg.From.Address, password);                client.DeliveryMethod = SmtpDeliveryMethod.Network;                client.Send(msg);            }            catch (Exception ex)            {                return false;            }                       return true;        }

         二:POP3協議:
              1.什麼是POP3協議:

       郵局協議Post Office Protocol,簡稱POP)是TCP/IP協議族中的一員,由RFC 1939 定義。本協議主要用於支援使用用戶端遠端管理在伺服器上的電子郵件。最新版本為POP3,全名“Post Office Protocol - Version 3”,而提供了SSL加密的POP3協議被稱為POP3S。(來自維基百科)

     2.如何?:

        要想實現郵件的操作。只需要遵守相應的命令協議即可。對於一般操作。需要先通過user 和pass的驗證。驗證成功後。方可執行後面的命令。

命令 描述
user 使用者名稱
pass  密碼,執行命令後可以擷取到郵件數量和郵件總位元組
apop 一種安全傳輸口令的辦法,digest是md5訊息摘要,執行成功導致狀態轉換
stat 請求伺服器發回關於郵箱的統計資料,如郵件總數和總位元組數
uidl 返回郵件的唯一識別碼,pop3會話的每個標識符都將是唯一的
list 返回郵件數量和每個郵件的大小
retr 返回由參數標識的郵件的全部文本,retr+5 表示返回前5封郵件的文本,但是返回回來的資訊是亂碼,需要轉碼
dele 伺服器將由參數標識的郵件標記為刪除,由quit命令執行
rset 伺服器將重設所有標記為刪除的郵件,用於撤消dele命令
top 伺服器將返回由參數標識的郵件前n行內容,n必須是正整數
noop 伺服器返回一個肯定的響應,不做任何操作。
quit 退出

       如上面的命令為了更方便的理解,請看下面代碼: 對於每次的sr.Readline 如果擷取成功了。在讀取的字串裡面都會有一個"+OK",可以通過判斷字串是否包含OK,來確定是否命令操作成功(代碼中我忽略了). 其次對於RERT命令來說。返回的是亂碼。需要轉碼。這個會在後續的部落格更新。

NOTES: pop3連接埠號碼預設110,代碼的寬口好。帳號密碼,是存在了類的靜態變數。沒有展示出來。

 public static void GetMessage()        {            TcpClient Server = new TcpClient(pop3,pop_port); //Tcp協議            NetworkStream netSream = Server.GetStream();            StreamReader sr = new StreamReader(netSream);            byte[] byData;            string data;            try            {                string str = string.Empty;                data = "USER " + fromEmailAddress+ "\r\n";                byData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray());                netSream.Write(byData, 0, byData.Length);                Console.WriteLine(sr.ReadLine());                 data = "PASS " + password + "\r\n";                byData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray());                netSream.Write(byData, 0, byData.Length);                Console.WriteLine(sr.ReadLine());
data = "STAT" + "\r\n"; byData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray()); netSream.Write(byData, 0, byData.Length); Console.WriteLine(sr.ReadLine()); Console.WriteLine("連結成功..."); } catch (Exception ex) { Console.Write("連結的伺服器失敗..."); return; } try { data = "RETR " +5 +"\r\n"; byData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray()); netSream.Write(byData, 0, byData.Length); string emailData = string.Empty; string szTemp = sr.ReadLine(); if (szTemp[0] != ‘-‘) // 如果擷取有錯的話.伺服器會返回一個字串以"-"開頭 { while (szTemp != ".") { szTemp = sr.ReadLine(); emailData += szTemp; } Console.WriteLine(emailData); } else { Console.WriteLine(szTemp); } } catch (Exception ex) { Console.WriteLine("Get email 失敗"); } }

    

    三.總結:部落格很多地方需要改進。裡面大部分都是借鑒的別人的代碼。以及其他部落格的文章。然後湊在一起的。希望博友對這方面瞭解多的。都給給自己的意見。3KU。

                       代碼Link:http://files.cnblogs.com/FourLeafCloverZc/SpongeBob.Email.Learn.zip

           

   

    

C#基礎--基於POP3協議的郵件接收和基於STMP的郵件發送

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.