3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
C#利用System.Net發送郵件(帶 抄送、密送、附件、html格式的郵件) 資料來源:http://www.cnblogs.com/lichunyang/p/System_Net_Send_Email.html /**************************************  *  * Copyright(c)2014 LeeStudio All rights reserved.  * CLR版本:4.0.30319.17929  * 開發團隊:欺心伴月個人工作室  * 技術博客:http://www.cnblogs.com/lichunyang/  * 所屬工程:LeeStudio.Basic  * 創 建 者:Frank Lee  * 修改時間:2014-02-20 11:20  * **************************************/ using System; using System.Text; using System.Net; using System.Net.Mail; using System.Net.Mime; namespace LeeStudio.Basic {     ///     /// 郵件發送類     ///     public class SendEmail     {         private MailMessage mailMessage = new MailMessage(); //產生實體一個郵件類         #region 構造函數         ///         /// 構造函數         ///         /// 收件人位址(多個以,號分開)         /// 寄件者地址         /// 主題         /// 正文         public SendEmail(string toAddresses, string fromAddress, string title, string body)             : this(toAddresses, fromAddress, “”, “”, title, body, false)         {         }         ///         /// 構造函數         ///         /// 收件人地址         /// 寄件者地址         /// 收件人名字         /// 寄件者姓名         /// 主題         /// 正文         /// 正文是否為html格式         public SendEmail(string toAddress, string fromAddress, string toName, string fromName, string title, string body, bool isBodyHtml)         {             mailMessage.From = new MailAddress(fromAddress, fromName, Encoding.GetEncoding(936));             if (toName.Equals(“”))                 mailMessage.To.Add(toAddress);             else                 mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936)));             mailMessage.Subject = title;             mailMessage.SubjectEncoding = Encoding.GetEncoding(936);             mailMessage.Body = body;             mailMessage.IsBodyHtml = isBodyHtml;             mailMessage.BodyEncoding = Encoding.GetEncoding(936);         }         #endregion         ///         /// 設置SMTP,並且將郵件發送出去         /// 所有參數都設置完成後再調用該方法         ///         /// 寄件者密碼         /// SMTP伺服器地址         public void SetSmtp(string password, string smtpHost)         {             SetSmtp(mailMessage.From.Address, password, smtpHost, 25, false, MailPriority.Normal);         }         ///         /// 設置SMTP,並且將郵件發送出去         /// 所有參數都設置完成後再調用該方法         ///         /// 寄件者位址(必須為真實有效的email位址)         /// 寄件者密碼         /// SMTP伺服器地址         /// SMTP伺服器的埠         /// SMTP伺服器是否啟用SSL加密         /// 郵件的優先順序         public void SetSmtp(string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority)         {             SmtpClient smtp = new SmtpClient();             smtp.DeliveryMethod = SmtpDeliveryMethod.Network;             smtp.Credentials = new NetworkCredential(address, password);             smtp.Host = smtpHost;             smtp.Port = smtpPort;             smtp.EnableSsl = isEnableSsl;             mailMessage.Priority = priority;             smtp.Send(mailMessage); //發送郵件         }         #region //設置郵寄地址         ///         /// 設置更多收件人         ///         /// 收件人地址         public void SetMoreToAddress(string toAddresses)         {             mailMessage.To.Add(toAddresses);         }         ///         /// 設置更多收件人         ///         /// 收件人地址         /// 收件人名字         public void SetMoreToAddress(string toAddress, string toName)         {             mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936)));         }         ///         /// 設置抄送者(多個以,號分開)         ///         /// 抄送者地址         public void SetCarbonCopyFor(string ccAddresses)         {             mailMessage.CC.Add(ccAddresses);         }         ///         /// 設置抄送者         ///         /// 抄送者地址         /// 抄送者名字         public void SetCarbonCopyFor(string ccAddress, string ccName)         {             mailMessage.Bcc.Add(new MailAddress(ccAddress, ccName, Encoding.GetEncoding(936)));         }         ///         /// 設置密送者(多個以,號分開)         ///         /// 密送者         public void SetBlindCarbonCopyFor(string bccAddresses)         {             mailMessage.Bcc.Add(bccAddresses);         }         ///         /// 設置密送者         ///         /// 密送者         /// 密送者名字         public void SetBlindCarbonCopyFor(string bccAddress, string bccName)         {             mailMessage.Bcc.Add(new MailAddress(bccAddress, bccName, Encoding.GetEncoding(936)));         }         #endregion         #region 添加附件         ///         /// 添加附件(自動識別檔案類型)         ///         /// 單個檔的路徑         public void Attachments(string fileName)         {             mailMessage.Attachments.Add(new Attachment(fileName));         }         ///         /// 添加附件(預設為富文本RTF格式)         ///         /// 單個檔的路徑         public void AttachmentsForRTF(string fileName)         {             mailMessage.Attachments.Add(new Attachment(fileName, MediaTypeNames.Application.Rtf));         }         #endregion     } } 調用是按照需求,自由設置參數。 using LeeStudio.Basic; private void SendEmail() {     #region 最簡設置     //SendEmail se = new SendEmail(“*****@****.com”, “****@163.com”, “title”, “body”);     //se.SetSmtp(“password”, “smtp.163.com”); //必須在所有參數設置完後調用此方法     #endregion     #region 完全設置     //string toAddresses = “***@**.**,***@**.**”;     //string toNames = “frank,lee”;     //SendEmail se = new SendEmail(“to@**.**”, “from@**.**”, “toname”, “fromname”,”title”, “body”, false);     //se.SetMoreToAddress(“to@**.**”, “toName”);     //se.SetCarbonCopyFor(“cc@**.**”);     //se.SetBlindCarbonCopyFor(“bcc@**.**”);     //string filePath = Request.PhysicalApplicationPath + “/file/SendEmail.txt”;     //se.Attachments(filePath);     //filePath = Request.PhysicalApplicationPath + “/file/RTF文件.docx”;     //se.AttachmentsForRTF(filePath);     //se.SetSmtp(“email”, “password”, “smtp”, 25, true, System.Net.Mail.MailPriority.Normal); //必須在所有參數設置完後調用此方法     #endregion } 遺留問題: 當有多個收件人/抄送者/密送者時,如何快速處理?之前的做法是讓使用者輸入字串,再將字串一一對應匹配,代碼如下: /// /// 將郵寄地址和名稱加入到鋸齒陣列中 /// /// 郵寄地址(多個以,號分開) /// 名稱(多個以,號分開) /// 位址和名稱陣列 private string[][] SetNameList(string addrs, string names) {     string[][] result = new string[2][];     string[] addr = addrs.Split(‘,’);     string[] name = names.Split(‘,’);     result[0] = new string[addr.Length];     result[1] = new string[name.Length];     for (int i = 0; i < addr.Length; i++)         result[0][i] = addr[i];     for (int i = 0; i < name.Length; i++)         result[1][i] = name[i];     return result; } 首先這個方法就很奇葩,其次,只要用戶輸入的個數不對應,又要做一堆的異常處理…… 有好的方法望不吝賜教。      

本文由jashliaoeuwordpress提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦