試用阿里雲郵件推送服務

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

首先在阿里雲郵件推送控制檯添加域名,而後在本身的dns服務器中添加以下的解析(根據控制檯中的「配置」):服務器

  • 一個主機名爲aliyundm的TXT記錄,用於驗證域名全部權
  • 一個主機名爲空、值爲v=spf1 include:spf1.dm.aliyun.com -all的TXT記錄,用於防止被看成垃圾郵件
  • 一個MX記錄

在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

相關文章
相關標籤/搜索