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 服务器功能的步骤:

  1. 打开“服务器管理器”:单击键盘上的 Windows 按钮。输入“服务器管理器”。在“结果”窗口中,单击“服务器管理器”。。
  2. 单击左窗格中的“仪表板”。。
  3. 单击“添加角色和功能”。也可以从右上角的“管理”菜单打开“添加角色和功能”。
  4. 在“开始之前”窗口上,单击“下一步”。
  5. 在“安装类型”中,单击“基于角色或基于功能的安装”。单击“下一步”。
  6. 在“服务器选择”中,依次单击“从服务器池中选择服务器”、所需的服务器和“下一步”。“服务器选择”窗口中会列出已使用“添加服务器”添加在“服务器管理器”中的服务器。默认情况下,本地服务器处于选中状态。向服务器管理器添加服务器列出了在 Windows Server 2012 上使用“添加服务器”的步骤。
  7. 在“服务器角色”窗口中,单击“下一步”。
  8. 在“功能”窗口中,选中“SMTP 服务器”。如果出现提示,请单击“添加功能”。单击“下一步”。
  9. 在“确认”中,选择“如果需要,自动重新启动目标服务器”,然后单击“安装”。完成时,单击“关闭”。

配置 SMTP 服务器

以下是使用 IIS 6.0 管理器配置 SMTP 虚拟服务器的步骤:

    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 服务器设置。


 

posted @ 2019-06-28 17:48  王小二不在家  阅读(216)  评论(0编辑  收藏  举报