試用阿里雲郵件推送服務


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

首先在阿里雲郵件推送控制台添加域名,然后在自己的dns服務器中添加如下的解析(根據控制台中的“配置”):

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

在mac上可以通過nslookup -query=TXT 域名nslookup -query=MX 域名命令查看DNS設置是否生效。

接着在阿里雲控制台驗證一下域名,驗證成功之后,添加一下發信地址(發件地址),並設置一下SMTP密碼。

然后通過下面的C#代碼使用阿里雲郵件推送服務的SMTP就可以發送郵件了。

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);

很輕松地解決了郵件發送問題。

[2016-7-9更新]
在.NET Core中使用MailKit通過阿里雲郵件推送服務(directmail)發送郵件的C#代碼:

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無法使用阿里雲郵件推送服務的問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM