1. 程式人生 > >使用.net 內置的SmtpClient來實現郵件的發送

使用.net 內置的SmtpClient來實現郵件的發送

開始 pcl console ati 地址 再次 eal 通過 xmx

  前言  

  發送郵件的方式有很多種,比如通過.net框架內置的SmtpClient來實現郵件發送,使用開源項目LumiSoft.Net等,這裏就講一下如何使用System.Net.Mail命名空間下的SmtpClient來發送郵件。

  一、郵件發送過程

  例如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。

  原理圖

  技術分享

  二、前置工作

  1.準備兩個測試用的郵箱(這裏使用qq郵箱)

  2.為郵箱開啟POP3/SMTP服務 和 IMAP / SMTP服務(qq郵箱 需要在設置->賬戶下開啟)

  技術分享

 三、開始coding

  1.創建MailMessage對象來編輯郵件正文,並指明發送者和接收者

  2.創建SmtpClient對象來發送郵件,需要指明郵件發送者的的賬號和密碼(qq郵箱要使用授權碼)

  3.示例代碼

  

技術分享
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using
System.Net; 5 using System.Net.Mail; 6 using System.Security; 7 using System.Text; 8 using System.Threading.Tasks; 9 10 namespace MailTest 11 { 12 class Program 13 { 14 static void Main(string[] args) 15 { 16 string fromMail = "[email protected]"; 17 string
toMail = "[email protected]"; 18 MailMessage mailMessage = new MailMessage 19 { 20 //發件人 21 From = new MailAddress(fromMail) 22 }; 23 24 //收件人 可以添加多個收件人 25 mailMessage.To.Add(new MailAddress(toMail)); 26 27 //mailMessage.CC 獲取包含此電子郵件的抄送(CC)收件人的地址集合 28 //郵件主題 29 mailMessage.SubjectEncoding=Encoding.UTF8; 30 mailMessage.Subject = "Hello"; 31 32 //郵件正文 33 mailMessage.BodyEncoding = Encoding.UTF8; 34 mailMessage.Body = "<p style=‘color:red;font-size:14px;‘>郵件測試</p>"; 35 36 //如果要發送html格式的消息,需要設置這個屬性 37 mailMessage.IsBodyHtml = true; 38 39 //郵件內容即消息正文中中顯示圖片 40 //需要為圖片指明src=‘cid:idname(資源id)‘ 41 AlternateView htmlBody = AlternateView.CreateAlternateViewFromString("<img src=‘cid:zfp‘/>", null, "text/html"); 42 43 //然後在LinkedResource加入文件的絕對地址,和ContentType 例如image/gif,text/html...與http請求的響應報文中的ContentType一致 44 LinkedResource lr = new LinkedResource("1.gif","image/gif"); 45 46 //綁定上文中指定的idname 47 lr.ContentId = "zfp"; 48 49 //添加鏈接資源 50 htmlBody.LinkedResources.Add(lr); 51 52 mailMessage.AlternateViews.Add(htmlBody); 53 54 //發送附件 指明附件的絕對地址 55 Attachment attachment = new Attachment("1.txt"); 56 mailMessage.Attachments.Add(attachment); 57 58 59 //創建郵件發送客戶端 60 try 61 { 62 //這裏使用qq郵箱 需要在設置->賬戶下開啟POP3/SMTP服務 和 IMAP / SMTP服務 63 //qq郵箱的發件服務器smtp.qq.com 端口25 64 SmtpClient sendClient = new SmtpClient("smtp.qq.com", 25) 65 { 66 //指定郵箱賬號和密碼 67 //在第三方客戶端登陸qq郵箱時,密碼是授權碼 68 //登陸qq郵箱在設置->賬戶下可以生成授權碼 69 Credentials = new NetworkCredential(fromMail, "xmxyldrmtvnrddfe") 70 }; 71 72 //指定如何發送電子郵件 73 sendClient.DeliveryMethod = SmtpDeliveryMethod.Network; 74 75 //指定使用使用安全套接字ssl加密的鏈接 76 77 sendClient.EnableSsl = true; 78 sendClient.Send(mailMessage); 79 } 80 catch 81 { 82 throw; 83 } 84 85 86 Console.WriteLine("ok!"); 87 Console.ReadKey(); 88 89 } 90 } 91 }
View Code

  四、可能出現的異常

  1.System.Net.Mail.SmtpException:“操作已超時。”

  這個異常可能是郵件服務器的ip與端口出錯

  2.System.Net.Mail.SmtpException:“參數或變量中有語法錯誤。服務器響應為:mail from address must be same as authorization user”

  這個異常一般是郵件發送者的賬號與密碼設置錯誤,這裏再次提示一下,qq郵箱的密碼需要使用授權碼

 

使用.net 內置的SmtpClient來實現郵件的發送