最近写邮件发送搞死人了,最后的结果,真是醉了,现整理如下:

网上一搜一大把,到处都是.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 里面写具体调用的方法。

注意,一定要采用异步的方式来发送,我这里用的是 asyncawait 方式来写(采用这个方式来写,至少在页面上就不用添加 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 发送邮件(异步)的更多相关文章

  1. ASP.NET MVC 4 异步加载控制器

    ASP.NET 4 Developer preview中的异步操纵器 在放弃了对.NET 3的支持之后, ASP.NET MVC 4 彻底拥抱了Task类库, 你不需求再蛋疼的给每个Action写两个 ...

  2. ASP.NET MVC 文件异步上传问题处理

    最近在做一个网站,用asp.net MVC4.0来开发,今天遇到了个小问题,通过查找相关渠道解决了,在这里把这个问题写出来,问题非常简单,不喜勿喷,mark之希望可以给遇到相同问题的初学者一点帮助.我 ...

  3. Asp.Net MVC part4 异步、校验、区域Area

    异步方式1:使用jquery的异步函数方式2:使用MVC的AjaxHelper行为的返回值设置:JsonResult对象,使用Json方法接收一个对象,在内部会完成对象的js序列化,向输出流中输出js ...

  4. asp.net mvc发送邮件

    参考文献: 第一篇:http://www.cnblogs.com/qinpengming/archive/2011/06/08/2075040.html 第二篇:http://www.cnblogs. ...

  5. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总

    MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...

  6. ASP.NET MVC 教程汇总

    自学MVC看这里——全网最全ASP.NET MVC 教程汇总   MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...

  7. 全网最全ASP.NET MVC 教程汇总

    全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MV ...

  8. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总(转)

    自学MVC看这里——全网最全ASP.NET MVC 教程汇总   MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要 ...

  9. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总【转】

    自学MVC看这里——全网最全ASP.NET MVC 教程汇总 http://www.cnblogs.com/powertoolsteam/archive/2015/08/13/4667892.html ...

随机推荐

  1. Oracle数据库该如何着手优化一个SQL

    这是个终极问题,因为优化本身的复杂性实在是难以总结的,很多时候优化的方法并不是用到了什么高深莫测的技术,而只是一个思想意识层面的差异,而这些都很可能连带导致性能表现上的巨大差异. 所以有时候我们应该先 ...

  2. 【架构设计】分布式文件系统 FastDFS的原理和安装使用

    本文地址 分享提纲: 1.概述 2. 原理 3. 安装 4. 使用 5. 参考文档 1. 概述 1.1)[常见文件系统] Google了一下,流行的开源分布式文件系统有很多,介绍如下:   -- mo ...

  3. animate.css(第三方动画使用方法)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Monaco; color: #a5b2b9 } animation 语法: animatio ...

  4. iOS 小知识点(持续更新)

    1.如何通过代码设置Button  title的字体大小 设置Button.titleLabel.font = [UIFont systemFontOfSize:<#(CGFloat)#> ...

  5. 【从零开始学BPM,Day2】默认表单开发

    [课程主题]主题:5天,一起从零开始学习BPM[课程形式]1.为期5天的短任务学习2.每天观看一个视频,视频学习时间自由安排. [第二天课程] Step 1 软件下载:H3 BPM10.0全开放免费下 ...

  6. iOS之开发中常用的颜色及其对应的RGB值

      R G B 值   R G B 值   R G B 值 黑色 0 0 0 #000000 黄色 255 255 0 #FFFF00 浅灰蓝色 176 224 230 #B0E0E6 象牙黑 41 ...

  7. (转载)linux下各个文件夹的作用

    linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...

  8. ubuntu14 查找并删除所有文件名中带有特定关键词的文件

    http://askubuntu.com/questions/625219/how-to-search-and-delete-files-who-contain-specific-string-in- ...

  9. 一步步开发自己的博客 .NET版 剧终篇(6、响应式布局 和 自定义样式)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  10. 【腾讯Bugly干货分享】WebVR如此近-three.js的WebVR示例解析

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ff1689a6c9121b1adb16 作者:苏晏烨 关于WebVR 最 ...