最近写邮件发送搞死人了,最后的结果,真是醉了,现整理以下:服务器
网上一搜一大把,处处都是.NET发送邮件的方法,我这里也大同小异的写了一个。异步
准备一个MailHelper.cs通用类,以下所示:async
重要的命名空间:测试
using System.Net; using System.Net.Mail;
其他代码以下:ui
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 = 25; // 注意打开系统防火墙相应的端口 //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 服务器属性的时候,顺序很重要!!!spa
下面在页面的 Controller 里面写具体调用的方法。code
注意,必定要采用异步的方式来发送,我这里用的是 async 和 await 方式来写(采用这个方式来写,至少在页面上就不用添加 async = true 等代码了,其它多的就不说了)具体的 Action 代码以下:orm
public async Task<ActionResult> SendEmail() { ViewBag.Title = "发送邮件"; // 异步发送邮件 await Task.Run(() => { new MailHelper().SendByAccount("{收件人邮箱地址}", "测试邮件标题", "测试邮件内容,测试邮件内容"); }); return View(); }
至此,邮件发送的所有功能就实现了,而且已经成功发送了。blog
网上处处都有,可是都没有提到 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:阿里云邮(原万网企业邮件)
收件人:16三、qq、sina、gmail,所有测试成功!