云计算 频道

文图实战:在Windows Azure中处理邮件

  【IT168微软云计算博客征文活动专稿】

  背景:电子邮件和Windows Azure

  发送电子邮件比你想象的要复杂得多,直接从云,如Windows Azure中发送邮件的挑战更大,因为你没有一个专用IP地址,并且垃圾邮件发送者可以使用Windows Azure发送大量的垃圾邮件,如果那样,垃圾邮件黑名单很快就会将Windows Azure数据中心的IP地址范围列为垃圾邮件源,这意味着以后合法的邮件也将被列为垃圾邮件。

  解决这个挑战最好的办法是禁止直接使用Windows Azure发送邮件,所有邮件全部使用第三方SMTP服务发送(如 SendGrid 或 AuthSMTP ),它们一般都有自己的反垃圾邮件规则和独立的IP地址。

  注意接收邮件与发送邮件完全不是一回事,只要你在Windows Azure中监听了SMTP 25端口,你就会接收到人家发给你的邮件。

  使用第三方服务发送邮件

  首先我在 SendGrid 免费注册了一个账号,免费账号每天可以发送200封邮件,但许多高级功能不能使用,如果你打算成为付费用户,我建议你购买银级版本。

文图实战:在Windows Azure中处理邮件

  图 1 SendGrid 邮件服务的五种版本

  快速注册后,需要完善一下账号和相关配置信息。

文图实战:在Windows Azure中处理邮件

  图 2 账号信息

  实际上使用 System.Net.Mail 命名空间发送邮件是相当简单的,下面就是发送邮件的代码:

    var reply = new MailMessage(RoleEnvironment.GetConfigurationSettingValue("EmailAddress"),
        msg.FromAddress)
    {
        Subject
= msg.Subject.StartsWith("RE:", StringComparison.InvariantCultureIgnoreCase)
                                                ? msg.Subject :
string.Format("RE: " + msg.Subject),
        Body
= body,
        IsBodyHtml
= msg.HasHtmlBody // send HTML if we got HTML
    };
    
if (!reply.IsBodyHtml) reply.BodyEncoding = Encoding.UTF8;
    
// make it a proper reply
    reply.Headers[
"References"] = msg.MessageID;
    reply.Headers[
"In-Reply-To"] = msg.MessageID;
    
// use our SMTP server, port, username, and password to send the mail
    (
new SmtpClient(RoleEnvironment.GetConfigurationSettingValue("SmtpServer"),
        
int.Parse(RoleEnvironment.GetConfigurationSettingValue("SmtpPort")))
    {
        Credentials
= new NetworkCredential(RoleEnvironment.GetConfigurationSettingValue("SmtpUsername"),
            RoleEnvironment.GetConfigurationSettingValue(
"SmtpPassword"))
    }).Send(reply);

 

0
相关文章