1. 程式人生 > 實用技巧 >C# 傳送郵件通知

C# 傳送郵件通知

web.config
   <!-- 配置發郵件:郵件訪問登入地址-->
    <add key="HttpsUrl" value="http://localhost:3334/Frame/Login.aspx" />
    <add key="IsSendMail" value="1" />
  <!--qq郵箱-->
    <add key="MailUser" value="[email protected]" />
    <add key="MailName" value="郵件通知" />
    <add key="MailHost
" value="smtp.qq.com" /> <add key="HostPort" value="25" /> <!-- qq郵箱碼--> <add key="MailPwd" value="測試自己郵箱密碼" />


  公共方法 ConfigHelper

public class ConfigHelper { /// <summary> /// 根據Key取Value值 /// </summary> /// <param name="key"></param>
public static string GetValue(string key) { return ConfigurationManager.AppSettings[key].ToString().Trim(); } /// <summary> /// 根據Key修改Value /// </summary> /// <param name="key">要修改的Key</param> /// <param name="value">
要修改為的值</param> public static void SetValue(string key, string value) { System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument(); xDoc.Load(HttpContext.Current.Server.MapPath("/XmlConfig/Config.xml")); System.Xml.XmlNode xNode; System.Xml.XmlElement xElem1; System.Xml.XmlElement xElem2; xNode = xDoc.SelectSingleNode("//appSettings"); xElem1 = (System.Xml.XmlElement)xNode.SelectSingleNode("//add[@key='" + key + "']"); if (xElem1 != null) xElem1.SetAttribute("value", value); else { xElem2 = xDoc.CreateElement("add"); xElem2.SetAttribute("key", key); xElem2.SetAttribute("value", value); xNode.AppendChild(xElem2); } xDoc.Save(HttpContext.Current.Server.MapPath("/XmlConfig/Config.xml")); } /// <summary> /// 修改web.config的配置值 /// </summary> /// <param name="key"></param> /// <param name="value"></param> public static void SetWebConfigValue(string key, string value) { Configuration objConfig = WebConfigurationManager.OpenWebConfiguration("~"); AppSettingsSection objAppSettings = (AppSettingsSection)objConfig.GetSection("appSettings"); if (objAppSettings != null) { //刪除name,然後新增新值 objAppSettings.Settings.Remove(key); objAppSettings.Settings.Add(key, value); //儲存配置檔案 objConfig.Save(); } } }
   傳送郵件
///
<summary> /// 傳送郵件 /// </summary> public class SMTPManager { public static string MailUser = ConfigHelper.GetValue("MailUser"); public static string MailName = ConfigHelper.GetValue("MailName"); public static string MailHost = ConfigHelper.GetValue("MailHost"); public static string MailPwd = ConfigHelper.GetValue("MailPwd"); public static string IsSendMail = ConfigHelper.GetValue("IsSendMail"); public static string HostPort = ConfigHelper.GetValue("HostPort"); public static string EnableSsl = ConfigHelper.GetValue("EnableSsl"); /// <summary> /// 傳送郵件 /// </summary> /// <param name=" sender">傳送人、支援傳送多個人每個地址用 ; 號隔開</param> /// <param name="Name">名稱</param> /// <param name="Describe">內容</param> /// <param name="File_Path">附件</param> /// <returns></returns> public static bool MailSending(string Sender, string Name, string Describe, string File_Path) { if(IsSendMail !="1") { return false; } try { MailAddress from = new MailAddress(MailUser, MailName); //郵件的發件人 MailMessage mail = new MailMessage(); //設定郵件圖片 AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(Describe, null, "text/html"); LinkedResource lrImage = new LinkedResource(AppDomain.CurrentDomain.BaseDirectory + "/Themes/Images/"+ConfigHelper.GetValue("EmailPhoto"), "image/gif"); lrImage.ContentId = "webimg"; //此處的ContentId 對應 htmlBodyContent 內容中的 cid: ,如果設定不正確,請不會顯示圖片 htmlBody.LinkedResources.Add(lrImage); mail.AlternateViews.Add(htmlBody); //設定郵件的標題 mail.Subject = Name;//任務名稱 //設定郵件的發件人 //Pass:如果不想顯示自己的郵箱地址,這裡可以填符合mail格式的任意名稱,真正發mail的使用者不在這裡設定,這個僅僅只做顯示用 mail.From = from; //設定郵件的收件人 string address = ""; string displayName = ""; /**/ /* 這裡這樣寫是因為可能發給多個聯絡人,每個地址用 ; 號隔開 一般從地址簿中直接選擇聯絡人的時候格式都會是 :使用者名稱1 < mail1 >; 使用者名稱2 < mail 2>; 因此就有了下面一段邏輯不太好的程式碼 如果永遠都只需要發給一個收件人那麼就簡單了 mail.To.Add("收件人mail"); */ string[] mailNames = (Sender + ";").Split(';'); foreach (string name in mailNames) { if (name != string.Empty) { if (name.IndexOf('<') > 0) { displayName = name.Substring(0, name.IndexOf('<')); address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' '); } else { displayName = string.Empty; address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' '); } mail.To.Add(new MailAddress(address, displayName)); } } //設定郵件的抄送收件人 //這個就簡單多了,如果不想快點下崗重要檔案還是CC一份給領導比較好 //mail.CC.Add(new MailAddress("[email protected]", "尊敬的領導"); //設定郵件的內容 mail.Body = FormatDescribe(Describe); //設定郵件的格式 mail.BodyEncoding = System.Text.Encoding.UTF8; mail.IsBodyHtml = true; //設定郵件的傳送級別 mail.Priority = MailPriority.Normal; //設定郵件的附件,將在客戶端選擇的附件先上傳到伺服器儲存一個,然後加入到mail中 if (File_Path != "") { mail.Attachments.Add(new Attachment(File_Path)); mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess; } SmtpClient client = new SmtpClient(); //設定用於 SMTP 事務的主機的名稱,填IP地址也可以了 client.Host = MailHost; //設定用於 SMTP 事務的埠,預設的是 25 client.Port = int.Parse(HostPort); client.EnableSsl = EnableSsl == "1" ? true : false; client.UseDefaultCredentials = false; //這裡才是真正的郵箱登陸名和密碼, 使用者名稱為 MailUser 密碼是 MailPwd string strMailPwd = MailPwd; client.Credentials = new System.Net.NetworkCredential(MailUser, strMailPwd.Trim()); client.DeliveryMethod = SmtpDeliveryMethod.Network; ////如果傳送失敗,SMTP 伺服器將傳送 失敗郵件 mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; //都定義完了,正式傳送了 client.Send(mail); return true; } catch (Exception ex) { throw new Exception(ex.Message); } } /// <summary> /// 格式化郵件內容 /// </summary> /// <param name="Describe"></param> /// <returns></returns> public static string FormatDescribe(string Describe) { StringBuilder sb = new StringBuilder(); sb.Append("<table cellSpacing=0 cellPadding=0 width=100% border=1>"); sb.Append("<tr>"); sb.Append("<td bgColor=#ffffff colSpan=4 height=25>【管理系統】</td>"); sb.Append("</tr>"); sb.Append("<TR>"); sb.Append("<TD align=right width=9% bgColor=#eef7ff height=25>主 題</TD>"); sb.Append("<TD id=title bgColor=#ffffff colSpan=3><FONT face=宋體>"); sb.Append("管理郵件通知"); sb.Append("</FONT></TD>"); sb.Append("</TR>"); sb.Append("<TR>"); sb.Append("<TD align=right width=9% bgColor=#eef7ff height=250>內容</TD>"); sb.Append("<TD id=title bgColor=#ffffff colSpan=3><FONT face=宋體>"); sb.Append(Describe); sb.Append("</FONT></TD>"); sb.Append("</TR>"); sb.Append("</table>"); return sb.ToString(); } /// <summary> /// 傳送電子郵件 /// </summary> /// <param name="smtpserver">SMTP伺服器</param> /// <param name="userName">登入帳號</param> /// <param name="pwd">登入密碼</param> /// <param name="nickName">發件人暱稱</param> /// <param name="strfrom">發件人</param> /// <param name="strto">收件人</param> /// <param name="subj">主題</param> /// <param name="bodys">內容</param> public static void SendMail(string smtpserver, string userName, string pwd, string nickName, string strfrom, string strto, string subj, string bodys) { try { SmtpClient _smtpClient = new SmtpClient(); _smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定電子郵件傳送方式 _smtpClient.Host = smtpserver;//指定SMTP伺服器 _smtpClient.Credentials = new System.Net.NetworkCredential(userName, pwd);//使用者名稱和密碼 //MailMessage _mailMessage = new MailMessage(strfrom, strto); MailAddress _from = new MailAddress(strfrom, nickName); MailAddress _to = new MailAddress(strto); MailMessage _mailMessage = new MailMessage(_from, _to); _mailMessage.Subject = subj;//主題 _mailMessage.Body = bodys;//內容 _mailMessage.BodyEncoding = System.Text.Encoding.Default;//正文編碼 _mailMessage.IsBodyHtml = true;//設定為HTML格式 _mailMessage.Priority = MailPriority.Normal;//優先順序 _smtpClient.Send(_mailMessage); } catch (Exception ex) { throw new Exception(ex.Message); } } }