架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1967|回复: 4

[资料] .net/c# 通过html模板发送邮件

[复制链接]
发表于 2018-1-8 15:05:16 | 显示全部楼层 |阅读模式
先上一个效果图吧!下图是通过html模板发送的邮件,主要是发送每天的收益情况

QQ截图20180108145806.jpg

首先,我们要有一个html模板,代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7.     <title>Document</title>
  8.     <style>
  9.         table,table tr th, table tr td { border:1px solid #000000; }
  10.         table { text-align: center; border-collapse: collapse;}
  11.     </style>
  12. </head>
  13. <body>
  14.     <h3>$DATE$ 收益播报</h3>
  15.     <table>
  16.         <thead>
  17.             <tr>
  18.                 <th>手机号</th>
  19.                 <th>设备名称</th>
  20.                 <th>网络地址</th>
  21.                 <th>内网地址</th>
  22.                 <th>固件版本</th>
  23.                 <th>设备状态</th>
  24.                 <th>昨日玩客币</th>
  25.                 <th>余额</th>
  26.                 <th>账户状态</th>
  27.                 <th>备注</th>
  28.                 <th>最后更新时间</th>
  29.             </tr>
  30.         </thead>
  31.         <tbody>
  32.             $Body$
  33.             <tr>
  34.                 <td>昨日收益统计:</td>
  35.                 <td>$LIANKECOUNT[        DISCUZ_CODE_46        ]lt;/td>
  36.                 <td>余额统计:</td>
  37.                 <td>$BALANCECOUNT[        DISCUZ_CODE_46        ]lt;/td>
  38.                 <td colspan="7"></td>
  39.             </tr>
  40.         </tbody>
  41.         <tfoot>
  42.             <tr>
  43.                 <td>昨日最高得币:</td>
  44.                 <td>$LIANKE$ 个</td>
  45.                 <td>昨日最高贡献上行带宽:</td>
  46.                 <td>$DAIKUAN$ Mbps</td>
  47.                 <td> 昨日最高贡献存储:</td>
  48.                 <td>$CUNCHU$ GB</td>
  49.                 <td colspan="5"></td>
  50.             </tr>
  51.         </tfoot>
  52.     </table>
  53. </body>
  54. </html>
复制代码


发送邮件的类(在读取html模板的代码,其实可以优化的,提示一下,把模板赋值给一个静态变量,静态变量在静态构造函数读取模板文件,大家自己优化下代码吧!):

  1. /// <summary>
  2.     /// 邮件发送帮助类
  3.     /// </summary>
  4.     public class EmailHelper
  5.     {
  6.         public class EmailModel
  7.         {
  8.             public EmailModel()
  9.             {
  10.                 ReceiveAddressList = new List<string>();
  11.                 SmtpPort = 25;
  12.             }

  13.             /// <summary>
  14.             /// 发件人邮箱地址
  15.             /// </summary>
  16.             public string FromAddress { get; set; }

  17.             /// <summary>
  18.             /// 发件人姓名
  19.             /// </summary>
  20.             public string FromDisplayName { get; set; }

  21.             /// <summary>
  22.             /// 登录名
  23.             /// </summary>
  24.             public string UserName { get; set; }

  25.             /// <summary>
  26.             /// 密码
  27.             /// </summary>
  28.             public string Password { get; set; }

  29.             /// <summary>
  30.             /// 邮件服务器
  31.             /// </summary>
  32.             public string SmtpHost { get; set; }

  33.             /// <summary>
  34.             /// 邮件服务器端口
  35.             /// </summary>
  36.             public int SmtpPort { get; set; }

  37.             /// <summary>
  38.             /// 收件人
  39.             /// </summary>
  40.             public List<string> ReceiveAddressList { get; set; }
  41.         }

  42.         /// <summary>
  43.         /// 发送邮件
  44.         /// </summary>
  45.         /// <param name="ReceiveAddressList">收件人列表</param>
  46.         /// <param name="Subject">主题</param>
  47.         /// <param name="Content">内容</param>
  48.         /// <param name="AttachFile">附件<附件名称,附件服务器物理路径></param>
  49.         public static bool SendEmail(EmailModel model, string Subject, string Content, Dictionary<string, string> AttachFile)
  50.         {
  51.             //smtp客户端
  52.             SmtpClient smtp = new SmtpClient(model.SmtpHost, model.SmtpPort);
  53.             //发件人邮箱身份验证凭证。 参数分别为 发件邮箱登录名和密码  
  54.             smtp.Credentials = new NetworkCredential(model.UserName, model.Password);
  55.             //创建邮件
  56.             MailMessage mail = new MailMessage();
  57.             //主题编码  
  58.             mail.SubjectEncoding = Encoding.UTF8;
  59.             //正文编码  
  60.             mail.BodyEncoding = Encoding.UTF8;
  61.             //邮件优先级
  62.             mail.Priority = MailPriority.Normal;
  63.             //以HTML格式发送邮件,为false则发送纯文本邮箱
  64.             mail.IsBodyHtml = true;
  65.             //发件人邮箱  
  66.             mail.From = new MailAddress(model.FromAddress, model.FromDisplayName, Encoding.UTF8);
  67.             //添加收件人,如果有多个,可以多次添加  
  68.             if (model.ReceiveAddressList.Count == 0)
  69.             {
  70.                 return false;
  71.             }
  72.             else
  73.             {
  74.                 for (int i = 0; i < model.ReceiveAddressList.Count; i++)
  75.                 {
  76.                     mail.To.Add(model.ReceiveAddressList[i]);
  77.                 }
  78.                 //邮件主题和内容
  79.                 mail.Subject = Subject;
  80.                 mail.Body = Content;
  81.                 //定义附件,参数为附件文件名,包含路径,推荐使用绝对路径  
  82.                 foreach (string skey in AttachFile.Keys)
  83.                 {
  84.                     Attachment objFile = new Attachment(AttachFile[skey]);
  85.                     objFile.Name = skey;
  86.                     mail.Attachments.Add(objFile);
  87.                 }
  88.                 try
  89.                 {
  90.                     //发送邮件
  91.                     smtp.Send(mail);
  92.                 }
  93.                 catch (Exception ex)
  94.                 {
  95.                     return false;
  96.                 }
  97.                 finally
  98.                 {
  99.                     smtp.Dispose();
  100.                 }
  101.                 return true;
  102.             }
  103.         }



  104.         /// <summary>
  105.         /// 发送邮件
  106.         /// </summary>
  107.         /// <param name="from">发件人邮箱</param>
  108.         /// <param name="fromname">发件人姓名</param>
  109.         /// <param name="to">收件人地址</param>
  110.         /// <param name="subject">标题</param>
  111.         /// <param name="body">内容</param>
  112.         /// <param name="username">发件人账号</param>
  113.         /// <param name="password">发件人密码</param>
  114.         /// <param name="server">发件服务器</param>
  115.         /// <param name="port">端口</param>
  116.         /// <returns></returns>
  117.         public static bool SendEmail(EmailModel model, string Subject, string Content)
  118.         {

  119.             try
  120.             {
  121.                 //邮件发送类
  122.                 MailMessage mail = new MailMessage();
  123.                 //是谁发送的邮件
  124.                 mail.From = new MailAddress(model.FromAddress, model.FromDisplayName, Encoding.UTF8);
  125.                 //发送给谁
  126.                 foreach (var item in model.ReceiveAddressList)
  127.                 {
  128.                     mail.To.Add(item);
  129.                 }
  130.                 //标题
  131.                 mail.Subject = Subject;
  132.                 //内容编码
  133.                 mail.BodyEncoding = Encoding.UTF8;
  134.                 //发送优先级
  135.                 mail.Priority = MailPriority.Normal;
  136.                 //邮件内容
  137.                 mail.Body = Content;
  138.                 //是否HTML形式发送
  139.                 mail.IsBodyHtml = true;
  140.                 //邮件服务器和端口
  141.                 SmtpClient smtp = new SmtpClient(model.SmtpHost, model.SmtpPort);
  142.                 smtp.UseDefaultCredentials = true;
  143.                 //指定发送方式
  144.                 smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
  145.                 //指定登录名和密码
  146.                 smtp.Credentials = new System.Net.NetworkCredential(model.UserName, model.Password);
  147.                 //超时时间
  148.                 smtp.Timeout = 10000;
  149.                 smtp.Send(mail);
  150.                 return true;
  151.             }

  152.             catch
  153.             {
  154.                 return false;
  155.             }
  156.         }

  157.         /// <summary>
  158.         /// 发送邮件
  159.         /// </summary>
  160.         /// <param name="from">发件人邮箱</param>
  161.         /// <param name="fromname">发件人姓名</param>
  162.         /// <param name="to">收件人地址</param>
  163.         /// <param name="subject">标题</param>
  164.         /// <param name="body">内容</param>
  165.         /// <param name="username">发件人账号</param>
  166.         /// <param name="password">发件人密码</param>
  167.         /// <param name="server">发件服务器</param>
  168.         /// <param name="port">端口</param>
  169.         /// <returns></returns>
  170.         public static bool SendEmail(EmailModel model,string toEmailAdress, string Subject, string Content)
  171.         {

  172.             try
  173.             {
  174.                 //邮件发送类
  175.                 MailMessage mail = new MailMessage();
  176.                 //是谁发送的邮件
  177.                 mail.From = new MailAddress(model.FromAddress, model.FromDisplayName, Encoding.UTF8);
  178.                 //发送给谁
  179.                 mail.To.Add(toEmailAdress);
  180.                 //标题
  181.                 mail.Subject = Subject;
  182.                 //内容编码
  183.                 mail.BodyEncoding = Encoding.UTF8;
  184.                 //发送优先级
  185.                 mail.Priority = MailPriority.Normal;
  186.                 //邮件内容
  187.                 mail.Body = Content;
  188.                 //是否HTML形式发送
  189.                 mail.IsBodyHtml = true;
  190.                 //邮件服务器和端口
  191.                 SmtpClient smtp = new SmtpClient(model.SmtpHost, model.SmtpPort);
  192.                 smtp.UseDefaultCredentials = true;
  193.                 //指定发送方式
  194.                 smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
  195.                 //指定登录名和密码
  196.                 smtp.Credentials = new System.Net.NetworkCredential(model.UserName, model.Password);
  197.                 //超时时间
  198.                 smtp.Timeout = 10000;
  199.                 smtp.Send(mail);
  200.                 return true;
  201.             }

  202.             catch
  203.             {
  204.                 return false;
  205.             }
  206.         }

  207.         /// <summary>  
  208.         ///替换模板中的字段值  
  209.         /// </summary>  
  210.         public static string ReplaceText(string Body, string date, string lianke, string kuandai, string cunchu, string liankecount, string balance)
  211.         {

  212.             string path = System.Web.HttpRuntime.AppDomainAppPath + "Template\\Email\\mailDay.html";
  213.             System.IO.StreamReader sr = new System.IO.StreamReader(path);
  214.             string str = string.Empty;
  215.             str = sr.ReadToEnd();
  216.             str = str.Replace("$Body$", Body);
  217.             str = str.Replace("$DATE$", date);
  218.             str = str.Replace("$LIANKE$", lianke);
  219.             str = str.Replace("$DAIKUAN$", kuandai);
  220.             str = str.Replace("$CUNCHU$", cunchu);
  221.             str = str.Replace("$LIANKECOUNT$", liankecount);
  222.             str = str.Replace("$BALANCECOUNT$", balance);
  223.             return str;
  224.         }
  225.     }
复制代码
调用方法:

  1. var html = Common.EmailHelper.ReplaceText(sb.ToString(), date.ToString(), res.wkb.ToString(), res.bandwidth.ToString(), res.disk.ToString(),lianke.ToString(),balance.ToString());
  2.                                 var sendRes = Common.EmailHelper.SendEmail(emialModel, x.PushMailAdress, date + "_链克收益通知", html);
  3.                                 
复制代码
通过模板发送邮件说白了就是调用string里面的Replace方法,进行字符串替换而已。




上一篇:判断两个集合是否一样
下一篇:summernote的字号设置
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2018-1-11 17:29:25 | 显示全部楼层
数据库存存储过程,代理作业也可以自动发邮件。拼成html格式。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2018-1-16 18:58:37 | 显示全部楼层
ahu865 发表于 2018-1-11 17:29
数据库存存储过程,代理作业也可以自动发邮件。拼成html格式。

没想到数据库竟然还有这功能,挺强大的

百度了一下,发现是调用sp_send_dbmail来发送邮件的

https://www.cnblogs.com/goodge/p/5567131.html


码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2018-1-16 19:33:31 | 显示全部楼层
ahu865 发表于 2018-1-11 17:29
数据库存存储过程,代理作业也可以自动发邮件。拼成html格式。

测试了一下 确实可以
利用数据库sp_send_dbmail发送邮件
http://www.itsvse.com/thread-4437-1-1.html
(出处: 架构师)


码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2018-1-17 13:09:54 | 显示全部楼层
小渣渣 发表于 2018-1-16 19:33
测试了一下 确实可以

管理员你太帅了,谢谢。100M币,我可以下载别的附件学习了。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

关闭

站点通知上一条 /1 下一条

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2018-10-18 09:49

Powered by Discuz! X3.4

© 2001-2014 Comsenz Inc.

快速回复 返回顶部 返回列表