C# 发送邮件通知
- web.config
- <!-- 配置发邮件:邮件访问登录地址-->
- <add key="HttpsUrl" value="http://localhost:3334/Frame/Login.aspx" />
- <add key="IsSendMail" value="" />
- <!--qq邮箱-->
- <add key="MailUser" value="xxcc@qq.com" />
- <add key="MailName" value="邮件通知" />
- <add key="MailHost" value="smtp.qq.com" />
- <add key="HostPort" value="" />
- <!-- qq邮箱码-->
- <add key="MailPwd" value="测试自己邮箱密码" />
- 公共方法 ConfigHelper
- public class ConfigHelper
- {
- /// <summary>
- /// 根据Key取Value值
- /// </summary>
- /// <param name="key"></param>
- public static string GetValue(string key)
- {
- return ConfigurationManager.AppSettings[key].ToString().Trim();
- }
- /// <summary>
- /// 根据Key修改Value
- /// </summary>
- /// <param name="key">要修改的Key</param>
- /// <param name="value">要修改为的值</param>
- public static void SetValue(string key, string value)
- {
- System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();
- xDoc.Load(HttpContext.Current.Server.MapPath("/XmlConfig/Config.xml"));
- System.Xml.XmlNode xNode;
- System.Xml.XmlElement xElem1;
- System.Xml.XmlElement xElem2;
- xNode = xDoc.SelectSingleNode("//appSettings");
- xElem1 = (System.Xml.XmlElement)xNode.SelectSingleNode("//add[@key='" + key + "']");
- if (xElem1 != null) xElem1.SetAttribute("value", value);
- else
- {
- xElem2 = xDoc.CreateElement("add");
- xElem2.SetAttribute("key", key);
- xElem2.SetAttribute("value", value);
- xNode.AppendChild(xElem2);
- }
- xDoc.Save(HttpContext.Current.Server.MapPath("/XmlConfig/Config.xml"));
- }
- /// <summary>
- /// 修改web.config的配置值
- /// </summary>
- /// <param name="key"></param>
- /// <param name="value"></param>
- public static void SetWebConfigValue(string key, string value) {
- Configuration objConfig = WebConfigurationManager.OpenWebConfiguration("~");
- AppSettingsSection objAppSettings = (AppSettingsSection)objConfig.GetSection("appSettings");
- if (objAppSettings != null) {
- //删除name,然后添加新值
- objAppSettings.Settings.Remove(key);
- objAppSettings.Settings.Add(key, value);
- //保存配置文件
- objConfig.Save();
- }
- }
- }
- 发送邮件
/// <summary>- /// 发送邮件
- /// </summary>
- public class SMTPManager
- {
- public static string MailUser = ConfigHelper.GetValue("MailUser");
- public static string MailName = ConfigHelper.GetValue("MailName");
- public static string MailHost = ConfigHelper.GetValue("MailHost");
- public static string MailPwd = ConfigHelper.GetValue("MailPwd");
- public static string IsSendMail = ConfigHelper.GetValue("IsSendMail");
- public static string HostPort = ConfigHelper.GetValue("HostPort");
- public static string EnableSsl = ConfigHelper.GetValue("EnableSsl");
- /// <summary>
- /// 发送邮件
- /// </summary>
- /// <param name=" sender">发送人、支持发送多个人每个地址用 ; 号隔开</param>
- /// <param name="Name">名称</param>
- /// <param name="Describe">内容</param>
- /// <param name="File_Path">附件</param>
- /// <returns></returns>
- public static bool MailSending(string Sender, string Name, string Describe, string File_Path)
- {
- if(IsSendMail !="")
- {
- return false;
- }
- try
- {
- MailAddress from = new MailAddress(MailUser, MailName); //邮件的发件人
- MailMessage mail = new MailMessage();
- //设置邮件图片
- AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(Describe, null, "text/html");
- LinkedResource lrImage = new LinkedResource(AppDomain.CurrentDomain.BaseDirectory + "/Themes/Images/"+ConfigHelper.GetValue("EmailPhoto"), "image/gif");
- lrImage.ContentId = "webimg"; //此处的ContentId 对应 htmlBodyContent 内容中的 cid: ,如果设置不正确,请不会显示图片
- htmlBody.LinkedResources.Add(lrImage);
- mail.AlternateViews.Add(htmlBody);
- //设置邮件的标题
- mail.Subject = Name;//任务名称
- //设置邮件的发件人
- //Pass:如果不想显示自己的邮箱地址,这里可以填符合mail格式的任意名称,真正发mail的用户不在这里设定,这个仅仅只做显示用
- mail.From = from;
- //设置邮件的收件人
- string address = "";
- string displayName = "";
- /**/
- /* 这里这样写是因为可能发给多个联系人,每个地址用 ; 号隔开
- 一般从地址簿中直接选择联系人的时候格式都会是 :用户名1 < mail1 >; 用户名2 < mail 2>;
- 因此就有了下面一段逻辑不太好的代码
- 如果永远都只需要发给一个收件人那么就简单了 mail.To.Add("收件人mail");
- */
- string[] mailNames = (Sender + ";").Split(';');
- foreach (string name in mailNames)
- {
- if (name != string.Empty)
- {
- if (name.IndexOf('<') > )
- {
- displayName = name.Substring(, name.IndexOf('<'));
- address = name.Substring(name.IndexOf('<') + ).Replace('>', ' ');
- }
- else
- {
- displayName = string.Empty;
- address = name.Substring(name.IndexOf('<') + ).Replace('>', ' ');
- }
- mail.To.Add(new MailAddress(address, displayName));
- }
- }
- //设置邮件的抄送收件人
- //这个就简单多了,如果不想快点下岗重要文件还是CC一份给领导比较好
- //mail.CC.Add(new MailAddress("Manage@hotmail.com", "尊敬的领导");
- //设置邮件的内容
- mail.Body = FormatDescribe(Describe);
- //设置邮件的格式
- mail.BodyEncoding = System.Text.Encoding.UTF8;
- mail.IsBodyHtml = true;
- //设置邮件的发送级别
- mail.Priority = MailPriority.Normal;
- //设置邮件的附件,将在客户端选择的附件先上传到服务器保存一个,然后加入到mail中
- if (File_Path != "")
- {
- mail.Attachments.Add(new Attachment(File_Path));
- mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
- } SmtpClient client = new SmtpClient();
- //设置用于 SMTP 事务的主机的名称,填IP地址也可以了
- client.Host = MailHost;
- //设置用于 SMTP 事务的端口,默认的是 25
- client.Port = int.Parse(HostPort);
- client.EnableSsl = EnableSsl == "" ? true : false;
- client.UseDefaultCredentials = false;
- //这里才是真正的邮箱登陆名和密码, 用户名为 MailUser 密码是 MailPwd
- string strMailPwd = MailPwd;
- client.Credentials = new System.Net.NetworkCredential(MailUser, strMailPwd.Trim());
- client.DeliveryMethod = SmtpDeliveryMethod.Network;
- ////如果发送失败,SMTP 服务器将发送 失败邮件
- mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
- //都定义完了,正式发送了
- client.Send(mail);
- return true;
- }
- catch (Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }
- /// <summary>
- /// 格式化邮件内容
- /// </summary>
- /// <param name="Describe"></param>
- /// <returns></returns>
- public static string FormatDescribe(string Describe)
- {
- StringBuilder sb = new StringBuilder();
- sb.Append("<table cellSpacing=0 cellPadding=0 width=100% border=1>");
- sb.Append("<tr>");
- sb.Append("<td bgColor=#ffffff colSpan=4 height=25>【管理系统】</td>");
- sb.Append("</tr>");
- sb.Append("<TR>");
- sb.Append("<TD align=right width=9% bgColor=#eef7ff height=25>主 题</TD>");
- sb.Append("<TD id=title bgColor=#ffffff colSpan=3><FONT face=宋体>");
- sb.Append("管理邮件通知");
- sb.Append("</FONT></TD>");
- sb.Append("</TR>");
- sb.Append("<TR>");
- sb.Append("<TD align=right width=9% bgColor=#eef7ff height=250>内容</TD>");
- sb.Append("<TD id=title bgColor=#ffffff colSpan=3><FONT face=宋体>");
- sb.Append(Describe);
- sb.Append("</FONT></TD>");
- sb.Append("</TR>");
- sb.Append("</table>");
- return sb.ToString();
- }
- /// <summary>
- /// 发送电子邮件
- /// </summary>
- /// <param name="smtpserver">SMTP服务器</param>
- /// <param name="userName">登录帐号</param>
- /// <param name="pwd">登录密码</param>
- /// <param name="nickName">发件人昵称</param>
- /// <param name="strfrom">发件人</param>
- /// <param name="strto">收件人</param>
- /// <param name="subj">主题</param>
- /// <param name="bodys">内容</param>
- public static void SendMail(string smtpserver, string userName, string pwd, string nickName, string strfrom, string strto, string subj, string bodys)
- {
- try
- {
- SmtpClient _smtpClient = new SmtpClient();
- _smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
- _smtpClient.Host = smtpserver;//指定SMTP服务器
- _smtpClient.Credentials = new System.Net.NetworkCredential(userName, pwd);//用户名和密码
- //MailMessage _mailMessage = new MailMessage(strfrom, strto);
- MailAddress _from = new MailAddress(strfrom, nickName);
- MailAddress _to = new MailAddress(strto);
- MailMessage _mailMessage = new MailMessage(_from, _to);
- _mailMessage.Subject = subj;//主题
- _mailMessage.Body = bodys;//内容
- _mailMessage.BodyEncoding = System.Text.Encoding.Default;//正文编码
- _mailMessage.IsBodyHtml = true;//设置为HTML格式
- _mailMessage.Priority = MailPriority.Normal;//优先级
- _smtpClient.Send(_mailMessage);
- }
- catch (Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }
- }
C# 发送邮件通知的更多相关文章
- SqlServer 2008 R2定时备份数据库,并且发送邮件通知
先配置数据库的邮件设置,这样才可以发送邮件. 2. 3. 4. 5. 6. 7. 8. 9. 10. 总的预览图,如图 执行这一段(先发送备份邮件,然后进行数据备份,将昨天的发送数据插入到另一张表中, ...
- Linux 上使用 Gmail SMTP 服务器发送邮件通知
导读 假定你想配置一个 Linux 应用,用于从你的服务器或桌面客户端发送邮件信息.邮件信息可能是邮件简报.状态更新(如 Cachet).监控警报(如 Monit).磁盘时间(如 RAID mdadm ...
- 通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢
通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢
- aircrack-ng后台跑包, 成功后自动发送邮件通知
我的思路是直接用nohup守护进程输出结构到指定文件, 然后判断文件中"KEY FOUND"的字段. 启动aircrack-ng方式 nohup aircrack-ng -w /o ...
- 基于Windows Azure 搭建基于SharePoint 2010 Intranet、Extranet、Internet (4): 配置传出邮件服务: 使用 outlook.com 发送邮件通知
前几篇文章,已经安装了SharePoint 2010,今天将演示如何配置传出邮件.由于某些原因,企业可能没有安装自己邮件服务器,此时我们可以使用公共的邮箱服务来发送邮件通知,比如outlook.com ...
- jenkins pipeline构建后发送邮件通知
jenkins pipeline构建后发送邮件通知 mail配置 进入系统配置 找到最下边的邮件通知 创建任务 Pipeline片段 post { always { bat "" ...
- kettle定时任务_第三方合作方有订单自动发送邮件通知_20161214
由于和第三方合作,需要知道第三方合作方有了订单后通知对方,如果每天查看数据太麻烦了,因此想到了用Kettle定时任务,先判断系统里有没有订单,如果有就执行查询调取订单数据并发送邮件作业,如果没有则不执 ...
- Linux学习-->如何通过Shell脚本实现发送邮件通知功能?
1.安装和配置sendmail 不需要注册公网域名和MX记录(不需要架设公网邮件服务器),通过Linux系统自带的mail命令即可对公网邮箱发送邮件.不过mail命令是依赖sendmail的,所以我们 ...
- ecshop开发日志之虚拟商品发送邮件通知
购买虚拟商品,系统会在支付后自动发送邮件到用户填写的邮件地址中,追踪过程如下首先在订单列表中可以获得到处理订单的php文件为flow.php,之后在最后一步url地址显示为http://localho ...
随机推荐
- 【av68676164(p38-p40)】进程调度
6.1 进程调度概念 进程调度 在合适的时候以一定策略选择一个就绪进程运行 进程调度的目标 响应速度尽可能快 进程处理的时间尽可能短 系统吞吐量尽可能大 资源利用率尽可能高 对所有进程要公平 避免饥饿 ...
- 《RabbitMQ》什么是死信队列
一 什么是死信队列 当一条消息在队列中出现以下三种情况的时候,该消息就会变成一条死信. 消息被拒绝(basic.reject / basic.nack),并且requeue = false 消息TTL ...
- Nginx配置SSL证书,提高网络安全性
首先区别Http与Https HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高 ...
- Linux下C++提示bind:address already in use
此地址下的此端口被占用,有可能你已经关闭了程序依然如此,因为TCP的TIME_WAIT(不懂的话可以可以查一查).解决方案:1.设置为SO_REUSEADDR 2.查看进程进程号(ps -ef 或者 ...
- Vuex mapMutation的基本使用
mapMutation-store中的同步方法 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default n ...
- python处理转载博客html
前景 在转载别人博客的时候通常我们会通过复制html然后放到编辑器里面, 但是通常html里有很多杂七杂八的东西, 比如script, svg这些标签导致排版出现问题 例如由lu标签引起的 由svg标 ...
- ThinkPHP 6.0 基础教程 - 安装
ThinkPHP6.0 的环境: PHP >= 7.1.0 我本地环境: Win10 PhpStudy 安装 PhpStudy 如果你已经安装 PhpStudy 或其他环境,请忽略这里 安装方法 ...
- 悄咪咪提高团队幸福感 & Surprise!
前言 本文的灵感是在几个月以前工作不忙(摸鱼)时想到的,老是自己一个人往前冲冲冲也没啥意思,需要想一点办法,来提高团队的效率,提高团队的幸福感(效率起来了,单位时间内代码写的更多,那不就幸福啦 ),经 ...
- 喵的Unity游戏开发之路 - 玩家控制下的球的滑动
- 关于华为否认HKSP来自官方的一点看法
今天刷手机,无意看到一则消息: 华为否认提交给 Linux 内核的不安全补丁 HKSP 来自官方 这个消息吸引我的原因有几点: 华为被制裁刚满一年,现在由于新冠疫情影响,感觉又处于很敏感的时期: 华为 ...