目的:寫一個可發送郵件的DLL。
原理:
例如A使用163郵箱發送郵件給B(qq郵箱)。首先A會把郵件通過SMTP(Simple Mail Transfer Protocol)協議傳輸到163的Smtp服務器上,163的Smtp服務器會根據B的郵箱賬號,把郵件通過Smtp協議發給QQ郵箱的Smtp服務器。QQ的Smtp服務器接收到郵件消息后會將之存儲在QQ郵箱的郵件存儲設備上。當B登陸QQ郵箱后,如果有新郵件,POP3服務器就會從QQ郵箱的郵件存儲設備上讀出郵件並通過POP3/IMAP服務發送給郵件客戶端的B。
原理圖
使用的對象:
smtpClient類:允許應用程序使用簡單郵件傳輸協議 (SMTP) 發送電子郵件。
MailAddress類:MailAddress類表示電子郵件的地址。該類結合SmtpClient類或MailMessage類使用,其實例存儲了電子郵件的地址信息。
MailMessage 類:MailMessage類是.NET Framework中管理郵件的專用類,表示可以使用SmtpClient類發送的電子郵件。MailMessage 類的實例表示一個電子郵件的所有內容,並用SmtpClient類來傳輸到SMTP服務器。若要指定電子郵件的發件人、收件人和內容,可以使用 MailMessage類的關聯屬性。
NetworkCredential類:為基於密碼的身份驗證方案(如基本、簡要、NTLM 和 Kerberos 身份驗證)提供憑據。
代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Mail; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void Main(string[] args) { sendingMail(); Console.ReadLine(); } public static string sendingMail() { string smtpService = "smtp.qq.com"; string sendEmail = "xxx@qq.com"; string sendpwd = "*******"; //確定smtp服務器地址 實例化一個Smtp客戶端 SmtpClient smtpclient = new SmtpClient(); smtpclient.Host = smtpService; //smtpClient.Port = "";//qq郵箱可以不用端口 //確定發件地址與收件地址 MailAddress sendAddress = new MailAddress(sendEmail); MailAddress receiveAddress = new MailAddress("XXXXXX@qq.com"); //構造一個Email的Message對象 內容信息 MailMessage mailMessage = new MailMessage(sendAddress, receiveAddress); mailMessage.Subject = "測試郵件" + DateTime.Now; mailMessage.SubjectEncoding = System.Text.Encoding.UTF8; mailMessage.Body = "測試郵件發送成功!!!"; mailMessage.BodyEncoding = System.Text.Encoding.UTF8; //郵件發送方式 通過網絡發送到smtp服務器 smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network; //如果服務器支持安全連接,則將安全連接設為true smtpclient.EnableSsl = true; try { //是否使用默認憑據,若為false,則使用自定義的證書,就是下面的networkCredential實例對象 smtpclient.UseDefaultCredentials = false; //指定郵箱賬號和密碼,需要注意的是,這個密碼是你在QQ郵箱設置里開啟服務的時候給你的那個授權碼 NetworkCredential networkCredential = new NetworkCredential(sendEmail, sendpwd); smtpclient.Credentials = networkCredential; //發送郵件 smtpclient.Send(mailMessage); Console.WriteLine("發送郵件成功"); } catch (System.Net.Mail.SmtpException ex) { Console.WriteLine(ex.Message, "發送郵件出錯"); } return "DLL調用成功!"; } } }
遇到的問題:
1.報錯:
解決辦法:將安全連接設為true,如:smtpclient.EnableSsl = true;
2.報錯:mail from address must be same as authorization user
解決辦法:QQ郵箱設置里開啟服務。如圖:
最后測試該方法成功,結果如圖:
更多詳盡的資料可參考這個地址:http://blog.csdn.net/liyanwwww/article/details/5507498