最近寫郵件發送搞死人了,最後的結果,真是醉了,現整理以下:服務器
網上一搜一大把,處處都是.NET發送郵件的方法,我這裏也大同小異的寫了一個。異步
準備一個MailHelper.cs通用類,以下所示:async
重要的命名空間:測試
using System.Net; using System.Net.Mail;
其他代碼以下:ui
public void Send(string to, string subject, string content, string from, string name, string password) { // 構造郵件體(按照常規構造便可) var mail = new MailMessage(); mail.From = new MailAddress(from.Trim(), name.Trim(), Encoding.UTF8); mail.To.Add(new MailAddress(to.Trim())); mail.Subject = subject.Trim(); mail.SubjectEncoding = Encoding.UTF8; mail.Body = content.Trim(); mail.BodyEncoding = Encoding.UTF8; mail.IsBodyHtml = true; mail.Priority = MailPriority.Normal; // 構造SMTP服務器(很重要!!!) var client = new SmtpClient(); client.UseDefaultCredentials = true; // 在最終發送成功的代碼中,本屬性必須在 Credentials 以前賦值 client.Credentials = new NetworkCredential(from, password); // 本屬性必須在 UseDefaultCredentials 以後賦值 client.DeliveryMethod = SmtpDeliveryMethod.Network; client.Host = "SMTP 服務器 IP 或 域名"; client.Port = 25; // 注意打開系統防火牆相應的端口 //client.EnableSsl = true; // 要看 SMTP 服務器是否支持 client.SendCompleted += SMTPSendCompleted; // 郵件發送完畢的回調方法 try { client.SendAsync(mail, Guid.NewGuid()); } catch (Exception e) { } } private void SMTPSendCompleted(object sender, AsyncCompletedEventArgs e) { var result = string.Empty; if (e.Cancelled) { result = "已取消發送郵件"; } else if (e.Error != null) { result = "失敗:" + e.UserState.ToString() + e.Error.Message; } else { result = "郵件發送成功"; } // 記錄 result }
上面就是一個發送郵件的通用類。阿里雲
特別須要注意的就是:在實例化 SMTP 服務器屬性的時候,順序很重要!!!spa
下面在頁面的 Controller 裏面寫具體調用的方法。code
注意,必定要採用異步的方式來發送,我這裏用的是 async 和 await 方式來寫(採用這個方式來寫,至少在頁面上就不用添加 async = true 等代碼了,其它多的就不說了)具體的 Action 代碼以下:orm
public async Task<ActionResult> SendEmail() { ViewBag.Title = "發送郵件"; // 異步發送郵件 await Task.Run(() => { new MailHelper().SendByAccount("{收件人郵箱地址}", "測試郵件標題", "測試郵件內容,測試郵件內容"); }); return View(); }
至此,郵件發送的所有功能就實現了,而且已經成功發送了。blog
網上處處都有,可是都沒有提到 SMTP 服務屬性賦值時有順序的問題,不知道是否是個人代碼有問題,纔會有順序的問題,這裏先記錄下來,後面再看吧。
總之,我是在本機上和服務器上面測試經過了。
開發環境:Win 7 Pro 64(本機)+ VS2013 + .NET Framework 4.6 + MVC 5.2.3.0
發佈環境:Win 2008 R2 SP1 Ent(服務器)+ IIS + .NET Framework 4.6
SMTP:阿里雲郵(原萬網企業郵件)
收件人:16三、qq、sina、gmail,所有測試成功!