C#郵件發送(最坑爹的郵箱-QQ郵箱)

最近工做挺悠閒的,有空的時候陪妹子出去玩玩,本身看看小說,看看電影,日子過的挺歡樂的,這個星期幡然悔悟,代碼纔是個人最愛,作點小東西,就寫個郵件發送程序。說的郵件發送相信工做過基本上都會用到過,用戶註冊完以後發個驗證郵件過去驗證一下,改密碼的時候郵箱驗證一下,用戶對網站體驗如何發個郵件調查一下,網站最近最熱的內容發個郵件推送一下,好吧,有點囉嗦。正文開始吧:html

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);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 = "myEmail@163.com";
 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[] { "XX@xx.com", "XX@xx.cn" };
 9             email.mailCcArray = new string[] {"XX@xx.com" };
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             }

一樣的起點不一樣的命運

1.網易郵箱,不須要絲毫的改動,這一點仍是給網易郵箱一個贊;加密

2.Gmail郵箱,須要改的地方,設置SSL是否加密,設置Port端口, SmtpClient smtp = new SmtpClient("XX@gmail.com");smtp.EnableSsl = true;smtp.Port = 587;設置一下就過關,能夠接受.spa

3.新浪郵箱,賣貨的廣告,各類坑爹微博,頁面作的是如此的糟糕,簡直讓人恍然間回到十幾年前,新浪慢慢的把本身淪爲二三流公司,也是須要設置一下,不過不是設置程序,須要去發送者郵箱設置,若是我不說你們知道是我紅色的那塊打開設置區嗎?將SMTP服務開啓能夠發送郵件~3d

4.QQ郵箱,人最多的郵箱不必定是最好的,QQ須要設置端口,並且須要去郵箱中設置:

http://service.mail.qq.com/cgi-bin/help?subtype=1&no=167&id=28

程序和郵箱都設置以後,等待幾分鐘以後收穫的結果是鏈接超時,不少都是建議換郵箱發,沒有合適的解決方法,QQ默認的可能只支持Foxmail和OutLook客戶端收發郵件.

業餘Winform小程序

業餘測試

相關文章
相關標籤/搜索