本文主要講解如何通過如現mailto標簽和SMTP協議兩種方式發送郵件,下面就直入主題
方法一、通過mailto標簽發送郵件
通過mailto不是正真意義上的發送郵件,它只是會自動調用我們本地默認的郵件服務軟件(這取決於我們本地安裝了什么郵件軟件,outlook,firemail等等),發送還是需要我們自己點擊發送才能完成。
mailto標簽有很多實用的方法,比如:加入郵件的默認主題、抄送地址、暗送(密件抄送)地址,郵件內容等待.....
1、為郵件加入發件人
格式:mailto:發件人地址
代碼示例
1 /// <summary> 2 /// sendFrom:發件人 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 7 { 8 string message = string.Format("mailto:{0}", sendFrom); 9 System.Diagnostics.Process.Start(message);//調用進程啟動郵件 10 }
2、為郵件加入默認標題
格式:mailto:發件人地址?subject=郵件主題
代碼示例
1 /// <summary> 2 /// sendFrom:發件人 3 /// subjetc:主題 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 8 { 9 string message = string.Format("mailto:{0}?subject={1}", sendFrom, subjetc); 10 System.Diagnostics.Process.Start(message);//調用進程啟動郵件 11 }
3、為郵件加入默認的抄送地址
格式:mailto:發件人地址?cc=抄送地址
代碼示例
1 /// <summary> 2 /// sendFrom:發件人 3 /// sendCC:抄送地址 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 8 { 9 string message = string.Format("mailto:{0}?cc={1}", sendFrom, sendCC); 10 System.Diagnostics.Process.Start(message);//調用進程啟動郵件 11 }
4、為郵件加入默認暗送(密件抄送)地址
格式:mailto:發件人地址?bcc=密送地址
代碼示例
1 /// <summary> 2 /// sendFrom:發件人 3 /// sendBCC:密送地址 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 8 { 9 string message = string.Format("mailto:{0}?bcc={1}", sendFrom, sendBCC); 10 System.Diagnostics.Process.Start(message);//調用進程啟動郵件 11 }
5、為郵件加入默認的內容
格式:mailto:發件人地址?body=郵件內容
代碼示例
1 /// <summary> 2 /// sendFrom:發件人 3 /// content:郵件內容 4 /// </summary> 5 /// <param name="sender"></param> 6 /// <param name="e"></param> 7 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 8 { 9 string message = string.Format("mailto:{0}?body={1}", sendFrom, content); 10 System.Diagnostics.Process.Start(message);//調用進程啟動郵件 11 }
6、多個郵件地址
格式:mailto:發件人地址1,發件地址2,發件地址3(以逗號分隔)
7、綜合型的:加入默認抄送地址,標題,內容
格式:mailto:發件人地址1,發件人地址2?cc=抄送地址&bcc=密送地址&subject=主題&body=郵件內容
代碼示例
1 /// <summary> 2 /// sendFrom:發件人 3 /// sendCC:抄送 4 /// subjetc:密送 5 /// subjetc:主題 6 /// content:郵件內容 7 /// </summary> 8 /// <param name="sender"></param> 9 /// <param name="e"></param> 10 private void btnSendEmail_ItemClick(object sender, ItemClickEventArgs e) 11 { 12 string message = string.Format("mailto:{0}?cc={1}&bcc={2}&subject={3}&body={4}", sendFrom, sendCC, 13 sendBCC, subjetc, content); 14 System.Diagnostics.Process.Start(message);//調用進程啟動郵件 15 }
如圖所示:

方法二、通過SMTP協議發送郵件
核心代碼:
1 /// <summary> 2 /// 發送郵件 3 /// </summary> 4 /// <param name="userEmailAddress">發件人地址</param> 5 /// <param name="userName">發件人姓名(可為空)</param> 6 /// <param name="password">密碼</param> 7 /// <param name="host">郵件服務器地址</param> 8 /// <param name="port"></param> 9 /// <param name="sendToList">收件人(多個電子郵件地址之間必須用逗號字符(“,”)分隔)</param> 10 /// <param name="sendCCList">抄送人(多個電子郵件地址之間必須用逗號字符(“,”)分隔)</param> 11 /// <param name="subject">主題</param> 12 /// <param name="body">內容</param> 13 /// <param name="attachmentsPath">附件路徑</param> 14 /// <param name="errorMessage">錯誤信息</param> 15 public static bool SendMessage(string userEmailAddress, string userName, string password, string host, int port, 16 string[] sendToList, string[] sendCCList, string subject, string body, string[] attachmentsPath, out string errorMessage) 17 { 18 errorMessage = string.Empty; 19 SmtpClient client = new SmtpClient(); 20 client.Credentials = new System.Net.NetworkCredential(userEmailAddress, password);//用戶名、密碼 21 client.DeliveryMethod = SmtpDeliveryMethod.Network;//指定電子郵件發送方式 22 client.Host = host;//郵件服務器 23 client.Port = port;//端口號 非SSL方式,默認端口號為:25 24 client.UseDefaultCredentials = true; 25 26 MailMessage msg = new MailMessage(); 27 //加發件人 28 foreach (string send in sendToList) 29 { 30 msg.To.Add(send); 31 } 32 //加抄送 33 foreach (string cc in sendCCList) 34 { 35 msg.To.Add(cc); 36 } 37 38 //在有附件的情況下添加附件 39 if (attachmentsPath != null && attachmentsPath.Length > 0) 40 { 41 foreach (string path in attachmentsPath) 42 { 43 var attachFile = new Attachment(path); 44 msg.Attachments.Add(attachFile); 45 } 46 } 47 msg.From = new MailAddress(userEmailAddress, userName);//發件人地址 48 msg.Subject = subject;//郵件標題 49 msg.Body = body;//郵件內容 50 msg.BodyEncoding = System.Text.Encoding.UTF8;//郵件內容編碼 51 msg.IsBodyHtml = true;//是否是HTML郵件 52 msg.Priority = MailPriority.High;//郵件優先級 53 54 try 55 { 56 client.Send(msg); 57 return true; 58 } 59 catch (System.Net.Mail.SmtpException ex) 60 { 61 errorMessage = ex.Message; 62 return false; 63 } 64 }
如圖所示:

PS:如有疑問,請留言,未經允許,不得私自轉載,轉載請注明出處:http://www.cnblogs.com/xuliangxing/p/7987282.html


