最近工作挺清閒的,有空的時候陪妹子出去玩玩,自己看看小說,看看電影,日子過的挺歡樂的,這個星期幡然悔悟,代碼才是我的最愛,做點小東西,就寫個郵件發送程序。說的郵件發送相信工作過基本上都會用到過,用戶注冊完之後發個驗證郵件過去驗證一下,改密碼的時候郵箱驗證一下,用戶對網站體驗如何發個郵件調查一下,網站最近最熱的內容發個郵件推送一下,好吧,有點啰嗦。正文開始吧: SMTP定義 簡單郵件傳輸協議 (Simple Mail Transfer Protocol, SMTP) 是事實上的在Internet傳輸email的標准。 SMTP是一個相對簡單的基於文本的協議。在其之上指定了一條消息的一個或多個接收者(在大多數情況下被確認是存在的),然後消息文本會被傳輸。可以很簡單地通過telnet程序來測試一個SMTP服務器。SMTP使用TCP端口25。要為一個給定的域名決定一個SMTP服務器,需要使用MX (Mail eXchange) DNS。 (摘自維基百科) 簡單的郵件發送程序 網上很多各種郵箱的發送程序,通常情況就是Gmail郵箱(比較小眾,程序員比較喜歡),網易郵箱(吐槽跟帖的最愛,還有只看不說的我),新浪郵箱(之前工作需要和新浪做接口,注冊了一個,現在已經淪為賣貨聚集地),QQ郵箱(用戶最多,分布最廣,且最坑爹的郵箱),常用的郵箱大概就是這幾種,網上也有相應的程序,大多數寫的比較亂,有個哥們寫了一個郵箱類,原創者也不知道是誰,沒弄過的可以先用這個類練個手~ 復制代碼 1 public class Email 2 { 3 /// <summary> 4 /// 發送者 5 /// </summary> 6 public string mailFrom { get; set; } 7 8 /// <summary> 9 /// 收件人 10 /// </summary> 11 public string[] mailToArray { get; set; } 12 13 /// <summary> 14 /// 抄送 15 /// </summary> 16 public string[] mailCcArray { get; set; } 17 18 /// <summary> 19 /// 標題 20 /// </summary> 21 public string mailSubject { get; set; } 22 23 /// <summary> 24 /// 正文 25 /// </summary> 26 public string mailBody { get; set; } 27 28 /// <summary> 29 /// 發件人密碼 30 /// </summary> 31 public string mailPwd { get; set; } 32 33 /// <summary> 34 /// SMTP郵件服務器 35 /// </summary> 36 public string host { get; set; } 37 38 /// <summary> 39 /// 正文是否是html格式 40 /// </summary> 41 public bool isbodyHtml { get; set; } 42 43 /// <summary> 44 /// 附件 45 /// </summary> 46 public string[] attachmentsPath { get; set; } 47 48 public bool Send() 49 { 50 //使用指定的郵件地址初始化MailAddress實例 51 MailAddress maddr = new MailAddress(mailFrom); 52 //初始化MailMessage實例 53 MailMessage myMail = new MailMessage(); 54 55 56 //向收件人地址集合添加郵件地址 57 if (mailToArray != null) 58 { 59 for (int i = 0; i < mailToArray.Length; i++) 60 { 61 myMail.To.Add(mailToArray[i].ToString()); 62 } 63 } 64 65 //向抄送收件人地址集合添加郵件地址 66 if (mailCcArray != null) 67 { 68 for (int i = 0; i < mailCcArray.Length; i++) 69 { 70 myMail.CC.Add(mailCcArray[i].ToString()); 71 } 72 } 73 //發件人地址 74 myMail.From = maddr; 75 76 //電子郵件的標題 77 myMail.Subject = mailSubject; 78 79 //電子郵件的主題內容使用的編碼 80 myMail.SubjectEncoding = Encoding.UTF8; 81 82 //電子郵件正文 83 myMail.Body = mailBody; 84 85 //電子郵件正文的編碼 86 myMail.BodyEncoding = Encoding.Default; 87 88 myMail.Priority = MailPriority.High; 89 90 myMail.IsBodyHtml = isbodyHtml; 91 92 //在有附件的情況下添加附件 93 try 94 { 95 if (attachmentsPath != null && attachmentsPath.Length > 0) 96 { 97 Attachment attachFile = null; 98 foreach (string path in attachmentsPath) 99 { 100 attachFile = new Attachment(path); 101 myMail.Attachments.Add(attachFile); 102 } 103 } 104 } 105 catch (Exception err) 106 { 107 throw new Exception("在添加附件時有錯誤:" + err); 108 } 109 110 SmtpClient smtp = new SmtpClient(); 111 //指定發件人的郵件地址和密碼以驗證發件人身份 112 smtp.Credentials = new System.Net.NetworkCredential(mailFrom, mailPwd); 113 smtp.UseDefaultCredentials = true; 114 smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 115 //設置SMTP郵件服務器 116 smtp.Host = host; 117 // smtp.EnableSsl = true; 118 //smtp.Port = 587; 119 try 120 { 121 //將郵件發送到SMTP郵件服務器 122 smtp.Send(myMail); 123 return true; 124 125 } 126 catch (System.Net.Mail.SmtpException ex) 127 { 128 return false; 129 } 130 131 } 132 } 復制代碼 上面是一個發送郵件的輔助類,功能非常全,基本上不用動手改程序: 先寫個控制台測試一下程序,發送是成功的,結果就不截圖了,如果寫到這裡都算是博客,我還不如去聽首歌,看官有興趣看下面的吧. 復制代碼 1 Email email = new Email(); 2 email.mailFrom = "[email protected]"; 3 email.mailPwd = "myPassword"; 4 email.mailSubject = "程序員的生活"; 5 email.mailBody = "很多程序員的其實非常艱苦的一個事情"; 6 email.isbodyHtml = true; 7 email.host = "smtp.163.com"; 8 email.mailToArray = new string[] { "[email protected]", "[email protected]" }; 9 email.mailCcArray = new string[] {"[email protected]" }; 10 email.attachmentsPath = new string[] { }; 11 if (email.Send()) 12 { 13 Console.WriteLine("郵件發送成功~"); 14 Console.ReadKey(); 15 } 16 else 17 { 18 Console.WriteLine("郵件發送失敗~"); 19 Console.ReadKey(); 20 }