最近有一个程序的邮件通知功能出问题了。本身搭建邮件服务器虽然不难,可是可靠性很难保证,邮件发送功能的服务化是趋势,看到阿里云正在公测邮件推送服务,正好借遇到邮件发送问题的机会试用一下,看可否解决咱们的实际问题。html
首先在阿里云邮件推送控制台添加域名,而后在本身的dns服务器中添加以下的解析(根据控制台中的“配置”):服务器
v=spf1 include:spf1.dm.aliyun.com -all
的TXT记录,用于防止被看成垃圾邮件在mac上能够经过nslookup -query=TXT 域名
与nslookup -query=MX 域名
命令查看DNS设置是否生效。async
接着在阿里云控制台验证一下域名,验证成功以后,添加一下发信地址(发件地址),并设置一下SMTP密码。阿里云
而后经过下面的C#代码使用阿里云邮件推送服务的SMTP就能够发送邮件了。code
var mailMsg = new MailMessage(); mailMsg.From = new MailAddress("控制台建立的发信地址", "显示名称"); mailMsg.To.Add("收件人邮箱"); mailMsg.Subject = "Hello aliyun dm"; mailMsg.Body = "Send from aliyun dm"; mailMsg.IsBodyHtml = true; var smtp = new SmtpClient("smtp.dm.aliyun.com", 25); smtp.Credentials = new NetworkCredential("控制台建立的发信地址", "SMTP密码"); smtp.Send(mailMsg);
很轻松地解决了邮件发送问题。htm
[2016-7-9更新]
在.NET Core中使用MailKit经过阿里云邮件推送服务(directmail)发送邮件的C#代码:blog
private static async Task SendEmailAsync( string fromName, string fromEmail, string toName, string toEmail, string title, string body) { var mailMessage = new MimeMessage(); mailMessage.From.Add(new MailboxAddress(fromName, fromEmail)); mailMessage.To.Add(new MailboxAddress(toName, toEmail)); mailMessage.Subject = title; mailMessage.Body = new TextPart("plain") { Text = body }; using (var smtpClient = new SmtpClient()) { await smtpClient.ConnectAsync("smtp.dm.aliyun.com", 25, SecureSocketOptions.None).ConfigureAwait(false); smtpClient.Authenticate(new NetworkCredential("username", "password")); await smtpClient.SendAsync(mailMessage).ConfigureAwait(false); await smtpClient.DisconnectAsync(true).ConfigureAwait(false); } }
但使用上面的代码发送邮件时,阿里云邮件推送服务会返回错误"503 Bad sequence of commands",详见 http://q.cnblogs.com/q/84031/
这个问题是MailKit的问题,详见 解决.NET Core中MailKit没法使用阿里云邮件推送服务的问题dns