一直想把發送郵件的功能掌握,總是各種情況拖著了,這兩天終於看了一下,整理一下,希望能幫到想學的。
發送郵件使用SMTP服務器,有兩種方案,一種是使用IIS的SMTP功能;另一種是直接使用郵件供應商的SMTP,比如Gmail、Sina、QQ等,使用這些SMTP服務器必須得注冊帳號,一般可以直接用郵箱及密碼,但是有些郵箱必須開啟POP3/SMTP服務才可以,比如QQ郵箱默認是關閉的,可以在“設置”->“賬戶”裡面找到。我今天整理的都是用的第二種。
早期的.NET版本用的是 System.Web.Mail 類提供的功能來發郵件;2.0版本推出了 System.Net.Mail 類來代替 System.Web.Mail ,但是我在 WebForm 裡面使用的時候用System.Net.Mail 老是觸發異常,後來改用 System.Web.Mail 才成功了,可以看下我代碼裡的區別;ASP.NET MVC 3 提供了 WebMail 類來發送郵件,更加方便。
控制台程序、WPF、WebForm 及 ASP.NET MVC 我都測試了一下,控制台程序和 WPF 都用了 System.Net.Mail ,WebForm 和 ASP.NET MVC 都可以用 System.Web.Mail ,而 ASP.NET MVC 3 直接用 WebMail 更方便。下面我把代碼分別貼出來。
控制台程序:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail;//添加引用 namespace SendEmail { class Program { static void Main(string[] args) { Program p = new Program(); bool flag = p.SendEmail(); if (flag) { Console.Write("Success !"); } Console.Read(); } public bool SendEmail() { MailMessage msg = new MailMessage(); msg.To.Add("[email protected]");//郵件接收者的帳號 msg.From = new MailAddress("[email protected]", "nickname", System.Text.Encoding.UTF8);//發送郵件的帳號及顯示名稱和字符編碼 msg.Subject = "Subject";//郵件標題 msg.SubjectEncoding = System.Text.Encoding.UTF8;//郵件標題編碼 msg.Body = "Content";//郵件內容 msg.BodyEncoding = System.Text.Encoding.UTF8;//郵件內容編碼 msg.IsBodyHtml = false;//是否是HTML郵件 msg.Priority = MailPriority.High;//郵件優先級 SmtpClient client = new SmtpClient(); client.Credentials = new System.Net.NetworkCredential("[email protected]", "password");//注冊的郵箱和密碼,就QQ郵箱而言,如果設置了獨立密碼,要用獨立密碼代替密碼 client.Host = "smtp.qq.com";//QQ郵箱對應的SMTP服務器 object userState = msg; try { client.SendAsync(msg, userState); return true; } catch (Exception ex) { Console.WriteLine(ex.Message); return false; } } } }
WPF:
System.Net.Mail; Button_Click( flag = MessageBox.Show(, MailMessage message = message.To.Add( message.From = MailAddress(, message.Subject = message.SubjectEncoding = message.Body = message.BodyEncoding = message.IsBodyHtml = message.Priority = Attachment att = Attachment(); SmtpClient smtp = smtp.Credentials = System.Net.NetworkCredential(, smtp.Host = userState = MessageBox.Show(ex.Message, }
WebForm:
System.Web.Mail; Page_Load( Button1_Click( flag = Response.Write( MailMessage message = message.To = message.From = message.Subject = message.Body = message.Fields.Add(, message.Fields.Add(, message.Fields.Add(, SmtpMail.SmtpServer = }
ASP.NET MVC :
= = ; WebMail.EnableSsl = ; WebMail.UserName = = = ,,“Content