C# 經過Smtp 完成系統發送郵件

  1 //1. 新建EmailHelper 類
  2 using System;
  3 using System.Collections.Generic;
  4 using System.Configuration;
  5 using System.Linq;
  6 using System.Net.Mail;
  7 using System.Web;
  8 
  9 namespace WebAPI.Common
 10 {
 11     public class EmailHelper
 12     {
 13         private MailMessage msg;
 14         private string[] emailfrom;
 15         private string[] emailto;
 16         private string[] emailcc;
 17         private string[] emailbcc;
 18         private string emailsubject;
 19         private System.Text.StringBuilder emailcontent; 
 20         public EmailHelper()
 21         { 
 22             msg = new MailMessage(); 
 23             Emailpara email = System.Configuration.ConfigurationManager.GetSection("email") as Emailpara;
 24 
 25             emailfrom = email.emailfrom.Split(';');
 26             emailto = email.emailto.Split(';');
 27             emailcc = email.emailcc.Split(';');
 28             emailbcc = email.emailbcc.Split(';');
 29             emailsubject = email.emailsubject;
 30 
 31             emailcontent = new System.Text.StringBuilder();
 32 
 33             //emailcontent.Append("<Table class=\"gridtable\">");
 34             //emailcontent.Append("<tr>");
 35             //emailcontent.Append("<th>Req_ID</th>");
 36             //emailcontent.Append("<th>Requester</th>");
 37             //emailcontent.Append("<th>Country</th>");
 38             //emailcontent.Append("<th>Env</th>");
 39             //emailcontent.Append("</tr>");
 40         } 
 41         public void setContent(string str)
 42         {
 43             //ErrorList.AddLast(request);
 44             //emailcontent.Append("<tr>");
 45             //emailcontent.Append("<td>" + request.Req_ID  + "</td>");
 46             //emailcontent.Append("<td>" + request.Requester + "</td>");
 47             //emailcontent.Append("<td>" + request.Country  +"</td>");
 48             //emailcontent.Append("<td>" + request.Env +"</td>");
 49             //emailcontent.Append("</tr>");
 50 
 51             emailcontent.Append(str);
 52 
 53             emailcontent.Append("<br />");
 54         }
 55 
 56         public void Send()
 57         {
 58             // emailcontent.Append("</Table>"); 
 59             //set emailTo
 60             foreach (string tostr in emailto)
 61             {
 62                 msg.To.Add(tostr);
 63             } 
 65             //set emailCC
 66             if (emailcc.Length > 0 && !String.Empty.Equals(emailcc[0]))
 67             {
 68                 foreach (string ccstr in emailcc)
 69                 {
 70                     msg.CC.Add(ccstr);
 71                 }
 72             } 
 73             //set emailBcc
 74             if (emailbcc.Length > 0 && !String.Empty.Equals(emailbcc[0]))
 75             {
 76 
 77                 foreach (string bccstr in emailbcc)
 78                 {
 79                     msg.Bcc.Add(bccstr);
 80                 }
 81             } 
 82             // set emailFrom
 83             if (emailfrom.Length > 0 && !String.Empty.Equals(emailfrom))
 84                 msg.From = new MailAddress(emailfrom[0]);
 85             else
 86                 msg.From = new MailAddress("DO.NOT.REPLY.TO@Test.COM");
 87 
 88             msg.Subject = emailsubject;
 89             msg.SubjectEncoding = System.Text.Encoding.UTF8;
 90 
 91             msg.BodyEncoding = System.Text.Encoding.UTF8;
 92             msg.IsBodyHtml = true;
 93             msg.Priority = MailPriority.Normal;
 94             string content = "<!DOCTYPE html><html><head><style type=\"text/css\">table.gridtable {font-family: verdana,arial,sans-serif;font-size:11px;color:#333333;border-width: 1px;border-color: #666666;border-collapse: collapse;}";
 95             content = content + "table.gridtable th {border-width: 1px;padding: 8px;    border-style: solid;border-color: #666666;background-color: #dedede;}table.gridtable td {border-width: 1px;    padding: 8px;border-style: solid;border-color: #666666;    background-color: #ffffff;}</style></head>";
 96             content = content + "<body><span style=\"font-family:Arial;font-size:16px;color:blue\"><br />An error has occurred <b></b> <br /><br />Following error happened.  <br /> Details as below . <br /><br /></span>";
 97             content = content + emailcontent.ToString();
 98             content = content + "<hr width=50% align=left /><span style=\"font-family:Arial;font-size:16px;color:blue\">Team Support <br /></span></body></html>";
 99 
100             msg.Body = content;
101             msg.BodyEncoding = System.Text.Encoding.UTF8;
102             SmtpClient client = new SmtpClient();
103             client.Host = "localhost"; // important thing, 
104             try
105             {
106                 client.Send(msg);
107             }
108             catch (Exception ex)
109             { 
110 
111             } 
113         }       
115     }
116     public class EmailSectionHandler : IConfigurationSectionHandler
117     {
118         public object Create(object parent, object configContext, System.Xml.XmlNode section)
119         {
120             string emailfrom = section.SelectSingleNode("EmailFrom").InnerText;
121             string emailto = section.SelectSingleNode("EmailTo").InnerText;
122             string emailcc = section.SelectSingleNode("EmailCC").InnerText;
123             string emailbcc = section.SelectSingleNode("EmailBCC").InnerText;
124             string emailsubject = section.SelectSingleNode("EmailSubject").InnerText;
125             Emailpara email = new Emailpara();
126             email.emailfrom = emailfrom;
127             email.emailto = emailto;
128             email.emailcc = emailcc;
129             email.emailbcc = emailbcc;
130             email.emailsubject = emailsubject;
131 
132             return email;
133         }
134     }
135 
136     public class Emailpara
137     {
138         public string emailfrom { get; set; }
139         public string emailto { get; set; }
140         public string emailcc { get; set; }
141         public string emailbcc { get; set; }
142         public string emailsubject { get; set; }
143 
144     }
145 }
146 
147 //2。配置Web.config
148 
149 <configuration>
150   <configSections>
151     <section name ="email" type ="WebAPI.Common.EmailSectionHandler" /> 
152   </configSections>
153 
154   <email>
155     <EmailFrom>DO.NOT.REPLY.TO@Test.COM</EmailFrom>
156     <EmailTo>Email Address</EmailTo>
157     <EmailCC></EmailCC>
158     <EmailBCC></EmailBCC>
159     <EmailSubject>ERROR Message</EmailSubject>
160   </email>
161 </configuration>
162 
163 //3。調用EmailHelper,併發送相關信息
164   EmailHelper email = new EmailHelper();
165             email.setContent("ErrorMessage");
166             email.Send();
// 以上內容在目前項目SMTP 服務器開啓的狀況下,能夠正常發送郵件

//4. 配置server 端的SMTP(如下內容:轉載,未經本身測試)

安裝 SMTP 服務器

如下是安裝 SMTP 服務器功能的步驟:css

  1. 打開「服務器管理器」:單擊鍵盤上的 Windows 按鈕。輸入「服務器管理器」。在「結果」窗口中,單擊「服務器管理器」。。
  2. 單擊左窗格中的「儀表板」。。
  3. 單擊「添加角色和功能」。也能夠從右上角的「管理」菜單打開「添加角色和功能」。
  4. 在「開始以前」窗口上,單擊「下一步」。
  5. 在「安裝類型」中,單擊「基於角色或基於功能的安裝」。單擊「下一步」。
  6. 在「服務器選擇」中,依次單擊「從服務器池中選擇服務器」、所需的服務器和「下一步」。「服務器選擇」窗口中會列出已使用「添加服務器」添加在「服務器管理器」中的服務器。默認狀況下,本地服務器處於選中狀態。向服務器管理器添加服務器列出了在 Windows Server 2012 上使用「添加服務器」的步驟。
  7. 在「服務器角色」窗口中,單擊「下一步」。
  8. 在「功能」窗口中,選中「SMTP 服務器」。若是出現提示,請單擊「添加功能」。單擊「下一步」。
  9. 在「確認」中,選擇「若是須要,自動從新啓動目標服務器」,而後單擊「安裝」。完成時,單擊「關閉」。

配置 SMTP 服務器

如下是使用 IIS 6.0 管理器配置 SMTP 虛擬服務器的步驟:html

    1. 打開 IIS 管理器:單擊鍵盤上的 Windows 按鈕。輸入「IIS」。在「結果」窗口中,單擊「Internet 信息服務 (IIS) 6.0 管理器」。
    2. 展開計算機名。右鍵單擊「[SMTP 虛擬服務器 1]」,而後單擊「屬性」。
    3. 在「訪問」選項卡中,單擊「中繼」按鈕。
    4. 單擊「添加」。對於「單臺計算機」,輸入 127.0.0.1,而後單擊「肯定」。
      經過添加 127.0.0.1,咱們將容許本地服務器今後 SMTP 服務器發送消息。若是你但願其餘計算機今後 SMTP 服務器發送消息,請輸入其 IP 地址。
    5. 在「傳遞」選項卡中,單擊「出站安全」。選擇如下選項:
      匿名訪問:不須要賬戶名或密碼。此選項將禁用 SMTP 服務器身份驗證。
      基自己份驗證:以明文形式發送要鏈接的服務器的賬戶名和密碼。輸入的賬戶用於傳輸電子郵件。向我的賬戶或 Exchange 賬戶發送電子郵件時,能夠選擇「基自己份驗證」。由於憑據將以明文形式傳遞,因此建議啓用「TLS 加密」。
      集成的 Windows 身份驗證:Windows 域賬戶名和密碼用於進行身份驗證。輸入的賬戶用於傳輸電子郵件。
      TLS 加密:與 SSL 類似,TLS 用於保護鏈接的安全。須要在此服務器上安裝一個有效的 SSL 服務器證書。
      Tip技巧
      若要使用我的電子郵件賬戶(包括 Exchange 賬戶)測試核心 SMTP 功能,請選擇「匿名訪問」。選擇「基自己份驗證」時,SMTP 使用 AUTH 命令。一些電子郵件提供商因爲 AUTH 命令可能會失敗。若是 AUTH 命令失敗,則錯誤可能會記錄到 SMTP 服務器上的 Windows 事件日誌中。
    6. 在「傳遞」選項卡中,單擊「出站鏈接」。默認狀況下,TCP 端口爲 25。若是其餘端口已在防火牆內打開,能夠輸入其餘端口。單擊「肯定」。
    7. 在「傳遞」選項卡中,單擊「高級」。默認狀況下,會列出本地服務器的「徹底限定的域名」。根據 Internet 提供商,「智能主機」屬性能夠留空。你可能須要聯繫 Internet 提供商來確認是否須要「智能主機」。不然你可能沒法進入 smtp.EMailProvider.com。
      note便箋
      「智能主機」(也稱爲中繼主機)是 Exchange Server 專用於路由全部傳出消息的服務器。「智能主機」收到消息以後,會將消息轉發到遠程域。「智能主機」的目標是提升 Exchange Server 的性能。Exchange Server 只向智能主機進行傳輸;而不是反覆聯繫遠程域,直到創建鏈接。
    8. 單擊「肯定」關閉全部窗口。
    9. 從新啓動 SMTP 服務器:右鍵單擊「[SMTP 虛擬服務器 1]」,而後依次單擊「中止」和「啓動」。必須從新啓動才能應用 SMTP 服務器設置。
相關文章
相關標籤/搜索