ASP.NET MVC 发送邮件(异步)
最近写邮件发送搞死人了,最后的结果,真是醉了,现整理如下:
网上一搜一大把,到处都是.NET发送邮件的方法,我这里也大同小异的写了一个。
准备一个MailHelper.cs通用类,如下所示:
重要的命名空间:
using System.Net;
using System.Net.Mail;
其余代码如下:
public void Send(string to, string subject, string content, string from, string name, string password)
{
// 构造邮件体(按照常规构造即可)
var mail = new MailMessage();
mail.From = new MailAddress(from.Trim(), name.Trim(), Encoding.UTF8);
mail.To.Add(new MailAddress(to.Trim()));
mail.Subject = subject.Trim();
mail.SubjectEncoding = Encoding.UTF8;
mail.Body = content.Trim();
mail.BodyEncoding = Encoding.UTF8;
mail.IsBodyHtml = true;
mail.Priority = MailPriority.Normal; // 构造SMTP服务器(很重要!!!)
var client = new SmtpClient();
client.UseDefaultCredentials = true; // 在最终发送成功的代码中,本属性必须在 Credentials 之前赋值
client.Credentials = new NetworkCredential(from, password); // 本属性必须在 UseDefaultCredentials 之后赋值
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Host = "SMTP 服务器 IP 或 域名";
client.Port = ; // 注意打开系统防火墙相应的端口
//client.EnableSsl = true; // 要看 SMTP 服务器是否支持
client.SendCompleted += SMTPSendCompleted; // 邮件发送完毕的回调方法 try
{
client.SendAsync(mail, Guid.NewGuid());
}
catch (Exception e)
{ }
} private void SMTPSendCompleted(object sender, AsyncCompletedEventArgs e)
{
var result = string.Empty; if (e.Cancelled)
{
result = "已取消发送邮件";
}
else if (e.Error != null)
{
result = "失败:" + e.UserState.ToString() + e.Error.Message;
}
else
{
result = "邮件发送成功";
} // 记录 result
}
上面就是一个发送邮件的通用类。
特别需要注意的就是:在实例化 SMTP 服务器属性的时候,顺序很重要!!!
下面在页面的 Controller 里面写具体调用的方法。
注意,一定要采用异步的方式来发送,我这里用的是 async 和 await 方式来写(采用这个方式来写,至少在页面上就不用添加 async = true 等代码了,其它多的就不说了)具体的 Action 代码如下:
public async Task<ActionResult> SendEmail()
{
ViewBag.Title = "发送邮件"; // 异步发送邮件
await Task.Run(() => { new MailHelper().SendByAccount("{收件人邮箱地址}", "测试邮件标题", "测试邮件内容,测试邮件内容"); }); return View();
}
至此,邮件发送的全部功能就实现了,并且已经成功发送了。
网上到处都有,但是都没有提到 SMTP 服务属性赋值时有顺序的问题,不知道是不是我的代码有问题,才会有顺序的问题,这里先记录下来,后面再看吧。
总之,我是在本机上和服务器上面测试通过了。
开发环境:Win 7 Pro 64(本机)+ VS2013 + .NET Framework 4.6 + MVC 5.2.3.0
发布环境:Win 2008 R2 SP1 Ent(服务器)+ IIS + .NET Framework 4.6
SMTP:阿里云邮(原万网企业邮件)
收件人:163、qq、sina、gmail,全部测试成功!
ASP.NET MVC 发送邮件(异步)的更多相关文章
- ASP.NET MVC 4 异步加载控制器
ASP.NET 4 Developer preview中的异步操纵器 在放弃了对.NET 3的支持之后, ASP.NET MVC 4 彻底拥抱了Task类库, 你不需求再蛋疼的给每个Action写两个 ...
- ASP.NET MVC 文件异步上传问题处理
最近在做一个网站,用asp.net MVC4.0来开发,今天遇到了个小问题,通过查找相关渠道解决了,在这里把这个问题写出来,问题非常简单,不喜勿喷,mark之希望可以给遇到相同问题的初学者一点帮助.我 ...
- Asp.Net MVC part4 异步、校验、区域Area
异步方式1:使用jquery的异步函数方式2:使用MVC的AjaxHelper行为的返回值设置:JsonResult对象,使用Json方法接收一个对象,在内部会完成对象的js序列化,向输出流中输出js ...
- asp.net mvc发送邮件
参考文献: 第一篇:http://www.cnblogs.com/qinpengming/archive/2011/06/08/2075040.html 第二篇:http://www.cnblogs. ...
- 自学MVC看这里——全网最全ASP.NET MVC 教程汇总
MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...
- ASP.NET MVC 教程汇总
自学MVC看这里——全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...
- 全网最全ASP.NET MVC 教程汇总
全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MV ...
- 自学MVC看这里——全网最全ASP.NET MVC 教程汇总(转)
自学MVC看这里——全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...
- 自学MVC看这里——全网最全ASP.NET MVC 教程汇总【转】
自学MVC看这里——全网最全ASP.NET MVC 教程汇总 http://www.cnblogs.com/powertoolsteam/archive/2015/08/13/4667892.html ...
随机推荐
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
- Android数据加密之SHA安全散列算法
前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- LoadRunner函数百科叒叒叒更新了!
首先要沉痛通知每周四固定栏目[学霸君]由于小编外派公干,本周暂停. 那么这周就由云层君来顶替了,当然要要说下自己做的内容啦,DuangDuang! <LoadRunner函数百科>更新通知 ...
- c# 字符串连接使用“+”和string.format格式化两种方式
参考文章:http://www.liangshunet.com/ca/201303/218815742.htm 字符串之间的连接常用的两种是:“+”连接.string.format格式化连接.Stri ...
- Collection集合
一些关于集合内部算法可以查阅这篇文章<容器类总结>. (Abstract+) Collection 子类:List,Queue,Set 增: add(E):boolean addAll(C ...
- 移动应用App测试与质量管理一
测试工程师 基于Html的WebApp测试, 现在一些移动App混Html5 HTML5性能测试 兼容性 整理后的脑图 测试招聘 弱化大量技术考察 看重看问题的高度 看重潜力 测试经验 质量管理 专项 ...
- AFNetworking报错"_UTTypeCopyPreferredTagWithClass", referenced from: _AFContentTypeForPathExtens
问题: 在和Unity交互的过程中,从Unity开发工具打包出来的项目文件,在添加AFNetworking库,运行时报出以下错误: Undefined symbols for architecture ...
- OpenGL shader 中关于顶点坐标值的思考
今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...
- 归并排序的java实现
归并排序的优点不说了. 做归并排序之前,我先试着将两个有序数组进行排序,合并成一个有序数组. 思路:定义好两个有序数组,理解的时候我先思考了数组只有一个数组的排序,然后是两个元素的数组的排序,思路就有 ...