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# 发送邮件通知的更多相关文章

  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. 有哪些开源的 Python 库让你相见恨晚?

    Arrow 我们知道 Python 已经内置了好几个处理时间相关的库,但是对于时间以及时区间的转换并不清晰,操作起来略繁琐,而 Arrow 可以弥补这个问题,它提供了更友好的方法,方便我们对时间,日期 ...

  2. Axios源码分析

    Axios是一个基于promise的HTTP库,可以用在浏览器和node.js中. 文档地址:https://github.com/axios/axios axios理解和使用 1.请求配置 { // ...

  3. javascript逻辑判断与循环笔记

        短路运算(逻辑中断)     1.短路运算的原理:当有多个表达式(值)时,左边的表达式值可以确定结果的时候就不再继续运算右边的表达式的值     2.逻辑与 &&     如果 ...

  4. import android.support.annotation.NonNull;报错

    将import android.support.annotation.NonNull;换成import androidx.annotation.NonNull;

  5. C语言基础printf()和scanf()函数

    在程序的运行中,我们经常会进行一些输入输出的操作,用来实现交互.为此, C语言便给出了 printf() 函数和 scanf() 函数用来实现输入和输出两个动作. 其中,printf()函数用于向控制 ...

  6. Java 开发者的编程噩梦,为什么你的代码总有 bug🐛?

    文章已经收录在 Github.com/niumoo/JavaNotes ,更有 Java 程序员所需要掌握的核心知识,欢迎Star和指教. 欢迎关注我的公众号,文章每周更新. 很多 Java 初学者在 ...

  7. 【Gin-API系列】配置文件和数据库操作(三)

    我们前面已经实现了API的基础版本,能对参数校验和返回指定数据,这一章,我们将对主机和交换机进行建模,存入数据库. 考虑到数据库安装和使用的简便性,我们采用文档存储结构的MongoDB数据库. Mon ...

  8. Flutter 容器(7) - DecoratedBox

    DecoratedBox: 装饰容器,在其子widget绘制前(或后)绘制一个装饰Decoration(如背景.边框.渐变等) import 'package:flutter/material.dar ...

  9. POW共识机制原理及优缺点

    PoW共识机制 POW工作量证明(英文全称为Proof of Work)在比特币之前就已经出现,中本聪在设计区块链的共识机制的时候就是借鉴了POW工作量证明.常见的是利用HASH运算的复杂度进行CPU ...

  10. angular中常用内置过滤器

    <!DOCTYPE html> <html lang="en" ng-app="app"> <head> <meta ...