1. web.config
  2. <!-- 配置发邮件:邮件访问登录地址-->
  3. <add key="HttpsUrl" value="http://localhost:3334/Frame/Login.aspx" />
  4. <add key="IsSendMail" value="" />
  5. <!--qq邮箱-->
  6. <add key="MailUser" value="xxcc@qq.com" />
  7. <add key="MailName" value="邮件通知" />
  8. <add key="MailHost" value="smtp.qq.com" />
  9. <add key="HostPort" value="" />
  10. <!-- qq邮箱码-->
  11. <add key="MailPwd" value="测试自己邮箱密码" />

  1.  
  1. 公共方法 ConfigHelper
  1. public class ConfigHelper
  2. {
  3. /// <summary>
  4. /// 根据Key取Value值
  5. /// </summary>
  6. /// <param name="key"></param>
  7. public static string GetValue(string key)
  8. {
  9. return ConfigurationManager.AppSettings[key].ToString().Trim();
  10. }
  11.  
  12. /// <summary>
  13. /// 根据Key修改Value
  14. /// </summary>
  15. /// <param name="key">要修改的Key</param>
  16. /// <param name="value">要修改为的值</param>
  17. public static void SetValue(string key, string value)
  18. {
  19. System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();
  20. xDoc.Load(HttpContext.Current.Server.MapPath("/XmlConfig/Config.xml"));
  21. System.Xml.XmlNode xNode;
  22. System.Xml.XmlElement xElem1;
  23. System.Xml.XmlElement xElem2;
  24. xNode = xDoc.SelectSingleNode("//appSettings");
  25.  
  26. xElem1 = (System.Xml.XmlElement)xNode.SelectSingleNode("//add[@key='" + key + "']");
  27. if (xElem1 != null) xElem1.SetAttribute("value", value);
  28. else
  29. {
  30. xElem2 = xDoc.CreateElement("add");
  31. xElem2.SetAttribute("key", key);
  32. xElem2.SetAttribute("value", value);
  33. xNode.AppendChild(xElem2);
  34. }
  35. xDoc.Save(HttpContext.Current.Server.MapPath("/XmlConfig/Config.xml"));
  36. }
  37.  
  38. /// <summary>
  39. /// 修改web.config的配置值
  40. /// </summary>
  41. /// <param name="key"></param>
  42. /// <param name="value"></param>
  43. public static void SetWebConfigValue(string key, string value) {
  44. Configuration objConfig = WebConfigurationManager.OpenWebConfiguration("~");
  45.  
  46. AppSettingsSection objAppSettings = (AppSettingsSection)objConfig.GetSection("appSettings");
  47. if (objAppSettings != null) {
  48. //删除name,然后添加新值
  49. objAppSettings.Settings.Remove(key);
  50. objAppSettings.Settings.Add(key, value);
  51.  
  52. //保存配置文件
  53. objConfig.Save();
  54. }
  55.  
  56. }
  57. }
  1. 发送邮件
    /// <summary>
  2. /// 发送邮件
  3. /// </summary>
  4. public class SMTPManager
  5. {
  6. public static string MailUser = ConfigHelper.GetValue("MailUser");
  7. public static string MailName = ConfigHelper.GetValue("MailName");
  8. public static string MailHost = ConfigHelper.GetValue("MailHost");
  9. public static string MailPwd = ConfigHelper.GetValue("MailPwd");
  10. public static string IsSendMail = ConfigHelper.GetValue("IsSendMail");
  11. public static string HostPort = ConfigHelper.GetValue("HostPort");
  12. public static string EnableSsl = ConfigHelper.GetValue("EnableSsl");
  13. /// <summary>
  14. /// 发送邮件
  15. /// </summary>
  16. /// <param name=" sender">发送人、支持发送多个人每个地址用 ; 号隔开</param>
  17. /// <param name="Name">名称</param>
  18. /// <param name="Describe">内容</param>
  19. /// <param name="File_Path">附件</param>
  20. /// <returns></returns>
  21. public static bool MailSending(string Sender, string Name, string Describe, string File_Path)
  22. {
  23. if(IsSendMail !="")
  24. {
  25. return false;
  26. }
  27. try
  28. {
  29. MailAddress from = new MailAddress(MailUser, MailName); //邮件的发件人
  30. MailMessage mail = new MailMessage();
  31.  
  32. //设置邮件图片
  33. AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(Describe, null, "text/html");
  34. LinkedResource lrImage = new LinkedResource(AppDomain.CurrentDomain.BaseDirectory + "/Themes/Images/"+ConfigHelper.GetValue("EmailPhoto"), "image/gif");
  35. lrImage.ContentId = "webimg"; //此处的ContentId 对应 htmlBodyContent 内容中的 cid: ,如果设置不正确,请不会显示图片
  36. htmlBody.LinkedResources.Add(lrImage);
  37. mail.AlternateViews.Add(htmlBody);
  38.  
  39. //设置邮件的标题
  40. mail.Subject = Name;//任务名称
  41.  
  42. //设置邮件的发件人
  43. //Pass:如果不想显示自己的邮箱地址,这里可以填符合mail格式的任意名称,真正发mail的用户不在这里设定,这个仅仅只做显示用
  44. mail.From = from;
  45.  
  46. //设置邮件的收件人
  47. string address = "";
  48. string displayName = "";
  49. /**/
  50. /* 这里这样写是因为可能发给多个联系人,每个地址用 ; 号隔开
  51. 一般从地址簿中直接选择联系人的时候格式都会是 :用户名1 < mail1 >; 用户名2 < mail 2>;
  52. 因此就有了下面一段逻辑不太好的代码
  53. 如果永远都只需要发给一个收件人那么就简单了 mail.To.Add("收件人mail");
  54. */
  55. string[] mailNames = (Sender + ";").Split(';');
  56. foreach (string name in mailNames)
  57. {
  58. if (name != string.Empty)
  59. {
  60. if (name.IndexOf('<') > )
  61. {
  62. displayName = name.Substring(, name.IndexOf('<'));
  63. address = name.Substring(name.IndexOf('<') + ).Replace('>', ' ');
  64. }
  65. else
  66. {
  67. displayName = string.Empty;
  68. address = name.Substring(name.IndexOf('<') + ).Replace('>', ' ');
  69. }
  70. mail.To.Add(new MailAddress(address, displayName));
  71. }
  72. }
  73.  
  74. //设置邮件的抄送收件人
  75. //这个就简单多了,如果不想快点下岗重要文件还是CC一份给领导比较好
  76. //mail.CC.Add(new MailAddress("Manage@hotmail.com", "尊敬的领导");
  77.  
  78. //设置邮件的内容
  79. mail.Body = FormatDescribe(Describe);
  80. //设置邮件的格式
  81. mail.BodyEncoding = System.Text.Encoding.UTF8;
  82. mail.IsBodyHtml = true;
  83. //设置邮件的发送级别
  84. mail.Priority = MailPriority.Normal;
  85.  
  86. //设置邮件的附件,将在客户端选择的附件先上传到服务器保存一个,然后加入到mail中
  87. if (File_Path != "")
  88. {
  89. mail.Attachments.Add(new Attachment(File_Path));
  90. mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
  91. } SmtpClient client = new SmtpClient();
  92. //设置用于 SMTP 事务的主机的名称,填IP地址也可以了
  93. client.Host = MailHost;
  94. //设置用于 SMTP 事务的端口,默认的是 25
  95. client.Port = int.Parse(HostPort);
  96. client.EnableSsl = EnableSsl == "" ? true : false;
  97. client.UseDefaultCredentials = false;
  98. //这里才是真正的邮箱登陆名和密码, 用户名为 MailUser 密码是 MailPwd
  99. string strMailPwd = MailPwd;
  100. client.Credentials = new System.Net.NetworkCredential(MailUser, strMailPwd.Trim());
  101. client.DeliveryMethod = SmtpDeliveryMethod.Network;
  102.  
  103. ////如果发送失败,SMTP 服务器将发送 失败邮件
  104. mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
  105.  
  106. //都定义完了,正式发送了
  107. client.Send(mail);
  108. return true;
  109. }
  110. catch (Exception ex)
  111. {
  112. throw new Exception(ex.Message);
  113. }
  114. }
  115.  
  116. /// <summary>
  117. /// 格式化邮件内容
  118. /// </summary>
  119. /// <param name="Describe"></param>
  120. /// <returns></returns>
  121. public static string FormatDescribe(string Describe)
  122. {
  123. StringBuilder sb = new StringBuilder();
  124. sb.Append("<table cellSpacing=0 cellPadding=0 width=100% border=1>");
  125.  
  126. sb.Append("<tr>");
  127. sb.Append("<td bgColor=#ffffff colSpan=4 height=25>【管理系统】</td>");
  128. sb.Append("</tr>");
  129.  
  130. sb.Append("<TR>");
  131. sb.Append("<TD align=right width=9% bgColor=#eef7ff height=25>主 题</TD>");
  132. sb.Append("<TD id=title bgColor=#ffffff colSpan=3><FONT face=宋体>");
  133. sb.Append("管理邮件通知");
  134. sb.Append("</FONT></TD>");
  135. sb.Append("</TR>");
  136.  
  137. sb.Append("<TR>");
  138. sb.Append("<TD align=right width=9% bgColor=#eef7ff height=250>内容</TD>");
  139. sb.Append("<TD id=title bgColor=#ffffff colSpan=3><FONT face=宋体>");
  140. sb.Append(Describe);
  141. sb.Append("</FONT></TD>");
  142. sb.Append("</TR>");
  143. sb.Append("</table>");
  144.  
  145. return sb.ToString();
  146. }
  147.  
  148. /// <summary>
  149. /// 发送电子邮件
  150. /// </summary>
  151. /// <param name="smtpserver">SMTP服务器</param>
  152. /// <param name="userName">登录帐号</param>
  153. /// <param name="pwd">登录密码</param>
  154. /// <param name="nickName">发件人昵称</param>
  155. /// <param name="strfrom">发件人</param>
  156. /// <param name="strto">收件人</param>
  157. /// <param name="subj">主题</param>
  158. /// <param name="bodys">内容</param>
  159. public static void SendMail(string smtpserver, string userName, string pwd, string nickName, string strfrom, string strto, string subj, string bodys)
  160. {
  161. try
  162. {
  163. SmtpClient _smtpClient = new SmtpClient();
  164. _smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
  165. _smtpClient.Host = smtpserver;//指定SMTP服务器
  166. _smtpClient.Credentials = new System.Net.NetworkCredential(userName, pwd);//用户名和密码
  167.  
  168. //MailMessage _mailMessage = new MailMessage(strfrom, strto);
  169. MailAddress _from = new MailAddress(strfrom, nickName);
  170. MailAddress _to = new MailAddress(strto);
  171. MailMessage _mailMessage = new MailMessage(_from, _to);
  172. _mailMessage.Subject = subj;//主题
  173. _mailMessage.Body = bodys;//内容
  174. _mailMessage.BodyEncoding = System.Text.Encoding.Default;//正文编码
  175. _mailMessage.IsBodyHtml = true;//设置为HTML格式
  176. _mailMessage.Priority = MailPriority.Normal;//优先级
  177. _smtpClient.Send(_mailMessage);
  178. }
  179. catch (Exception ex)
  180. {
  181. throw new Exception(ex.Message);
  182. }
  183. }
  184.  
  185. }

C# 发送邮件通知的更多相关文章

  1. SqlServer 2008 R2定时备份数据库,并且发送邮件通知

    先配置数据库的邮件设置,这样才可以发送邮件. 2. 3. 4. 5. 6. 7. 8. 9. 10. 总的预览图,如图 执行这一段(先发送备份邮件,然后进行数据备份,将昨天的发送数据插入到另一张表中, ...

  2. Linux 上使用 Gmail SMTP 服务器发送邮件通知

    导读 假定你想配置一个 Linux 应用,用于从你的服务器或桌面客户端发送邮件信息.邮件信息可能是邮件简报.状态更新(如 Cachet).监控警报(如 Monit).磁盘时间(如 RAID mdadm ...

  3. 通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢

    通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢

  4. aircrack-ng后台跑包, 成功后自动发送邮件通知

    我的思路是直接用nohup守护进程输出结构到指定文件, 然后判断文件中"KEY FOUND"的字段. 启动aircrack-ng方式 nohup aircrack-ng -w /o ...

  5. 基于Windows Azure 搭建基于SharePoint 2010 Intranet、Extranet、Internet (4): 配置传出邮件服务: 使用 outlook.com 发送邮件通知

    前几篇文章,已经安装了SharePoint 2010,今天将演示如何配置传出邮件.由于某些原因,企业可能没有安装自己邮件服务器,此时我们可以使用公共的邮箱服务来发送邮件通知,比如outlook.com ...

  6. jenkins pipeline构建后发送邮件通知

    jenkins pipeline构建后发送邮件通知 mail配置 进入系统配置 找到最下边的邮件通知 创建任务 Pipeline片段 post { always { bat "" ...

  7. kettle定时任务_第三方合作方有订单自动发送邮件通知_20161214

    由于和第三方合作,需要知道第三方合作方有了订单后通知对方,如果每天查看数据太麻烦了,因此想到了用Kettle定时任务,先判断系统里有没有订单,如果有就执行查询调取订单数据并发送邮件作业,如果没有则不执 ...

  8. Linux学习-->如何通过Shell脚本实现发送邮件通知功能?

    1.安装和配置sendmail 不需要注册公网域名和MX记录(不需要架设公网邮件服务器),通过Linux系统自带的mail命令即可对公网邮箱发送邮件.不过mail命令是依赖sendmail的,所以我们 ...

  9. ecshop开发日志之虚拟商品发送邮件通知

    购买虚拟商品,系统会在支付后自动发送邮件到用户填写的邮件地址中,追踪过程如下首先在订单列表中可以获得到处理订单的php文件为flow.php,之后在最后一步url地址显示为http://localho ...

随机推荐

  1. 【av68676164(p38-p40)】进程调度

    6.1 进程调度概念 进程调度 在合适的时候以一定策略选择一个就绪进程运行 进程调度的目标 响应速度尽可能快 进程处理的时间尽可能短 系统吞吐量尽可能大 资源利用率尽可能高 对所有进程要公平 避免饥饿 ...

  2. 《RabbitMQ》什么是死信队列

    一 什么是死信队列 当一条消息在队列中出现以下三种情况的时候,该消息就会变成一条死信. 消息被拒绝(basic.reject / basic.nack),并且requeue = false 消息TTL ...

  3. Nginx配置SSL证书,提高网络安全性

    首先区别Http与Https HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高 ...

  4. Linux下C++提示bind:address already in use

    此地址下的此端口被占用,有可能你已经关闭了程序依然如此,因为TCP的TIME_WAIT(不懂的话可以可以查一查).解决方案:1.设置为SO_REUSEADDR 2.查看进程进程号(ps -ef 或者 ...

  5. Vuex mapMutation的基本使用

    mapMutation-store中的同步方法 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default n ...

  6. python处理转载博客html

    前景 在转载别人博客的时候通常我们会通过复制html然后放到编辑器里面, 但是通常html里有很多杂七杂八的东西, 比如script, svg这些标签导致排版出现问题 例如由lu标签引起的 由svg标 ...

  7. ThinkPHP 6.0 基础教程 - 安装

    ThinkPHP6.0 的环境: PHP >= 7.1.0 我本地环境: Win10 PhpStudy 安装 PhpStudy 如果你已经安装 PhpStudy 或其他环境,请忽略这里 安装方法 ...

  8. 悄咪咪提高团队幸福感 & Surprise!

    前言 本文的灵感是在几个月以前工作不忙(摸鱼)时想到的,老是自己一个人往前冲冲冲也没啥意思,需要想一点办法,来提高团队的效率,提高团队的幸福感(效率起来了,单位时间内代码写的更多,那不就幸福啦 ),经 ...

  9. 喵的Unity游戏开发之路 - 玩家控制下的球的滑动

  10. 关于华为否认HKSP来自官方的一点看法

    今天刷手机,无意看到一则消息: 华为否认提交给 Linux 内核的不安全补丁 HKSP 来自官方 这个消息吸引我的原因有几点: 华为被制裁刚满一年,现在由于新冠疫情影响,感觉又处于很敏感的时期: 华为 ...