最近有一個程序的郵件通知功能出問題了。本身搭建郵件服務器雖然不難,可是可靠性很難保證,郵件發送功能的服務化是趨勢,看到阿里雲正在公測郵件推送服務,正好借遇到郵件發送問題的機會試用一下,看可否解決咱們的實際問題。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