C# 通过Smtp 完成系统发送邮件

2021-05-29 06:02

阅读:523

YPE html>

标签:host   context   ddr   匿名   下一步   reac   count   win   中继   

  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("");
 34//emailcontent.Append("");
 35//emailcontent.Append("");
 36//emailcontent.Append("");
 37//emailcontent.Append("");
 38//emailcontent.Append("");
 39//emailcontent.Append(""); 40        } 
 41publicvoid setContent(string str)
 42        {
 43//ErrorList.AddLast(request);
 44//emailcontent.Append("");
 45//emailcontent.Append("");
 46//emailcontent.Append("");
 47//emailcontent.Append("");
 48//emailcontent.Append("");
 49//emailcontent.Append(""); 50 51            emailcontent.Append(str);
 52 53             emailcontent.Append("
"); 54 } 55 56publicvoid Send() 57 { 58// emailcontent.Append("
Req_ID Requester Country Env
" + request.Req_ID + " " + request.Requester + " " + request.Country +" " + request.Env +"
");
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 = " "; 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;}"; 96 content = content + "
An error has occurred

Following error happened.
Details as below .

"; 97 content = content + emailcontent.ToString(); 98 content = content + "
Team Support
"; 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 150 151
"email" type ="WebAPI.Common.EmailSectionHandler" /> 152
153 154 155 DO.NOT.REPLY.TO@Test.COM156 Email Address157 158 159 ERROR Message160 161
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 服务器设置。


 

C# 通过Smtp 完成系统发送邮件

标签:host   context   ddr   匿名   下一步   reac   count   win   中继   

原文地址:https://www.cnblogs.com/allenzhang/p/11104070.html


评论


亲,登录后才可以留言!