从Azure上托管的Web应用程序发送gmail

时间:2014-11-12 07:07:09

标签: email azure smtp gmail

Azure的新手,但我的应用程序已成功发布到云以及我需要的数据库后端(SQL服务器)。

应用程序中的所有内容都按预期工作,但电子邮件功能除外。我通过Gmail帐户发送电子邮件提醒,但它们似乎没有被发送出去。应用程序不会崩溃,并且尝试配置远程调试已经证明是困难的。

这是我用来发送电子邮件的片段:

        //Parse html document which will show in outgoing email
        StreamReader reader = new StreamReader(HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["template"]));
        string body = reader.ReadToEnd();

        //Populate placeholders with message variables
        body = body.Replace("<%holder%>", value);
        ...Omitted for brevity

        try
        {
            var smtp = new SmtpClient
            {
                Host = "smtp.gmail.com",
                Port = 587,
                EnableSsl = true,
                DeliveryMethod = SmtpDeliveryMethod.Network,
                UseDefaultCredentials = false,
                Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
            };

            using (var message = new MailMessage(fromAddress, toAddress)
            {
                IsBodyHtml = true,
                Subject = subject,
                Body = body,
            })
            {
                smtp.Send(message);
            }
        }

应用程序没有崩溃,因此没有错误消息。所以我想也许它无法在行中抓取文件:

StreamReader(HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["template"]));
string body = reader.ReadToEnd();

所以我尝试发送一个硬编码的字符串作为测试:

string body = "test";

仍未收到任何电子邮件,也没有任何错误消息。我是azure web hosting的新手,但有些配置我可能会在这里丢失吗? Azure是否允许通过第三方电子邮件客户端发送邮件? Fyi - 上面的代码适用于localhost。

1 个答案:

答案 0 :(得分:2)

从公共云发送电子邮件并不像有些人认为的那样微不足道。为了不被列入黑名单,有很多事情需要弄清楚。特别是当您打算使用公共邮件服务时。

我的第一个猜测是,Azure数据中心的IP地址(或您托管的地址)可能会被邮件服务器(包括Microsoft自己的Office 365)列入黑名单。

我还要提到,使用SendGrid从Azure托管的应用程序发送电子邮件的推荐方法。他们有免费套餐。更多信息from Microsoft on that subject, can be found here

解决问题的确切原因的唯一方法是联系GMail支持并询问他们是否以任何方式阻止从Azure云连接的网络客户端。或者在您的Web应用程序所在的同一数据中心中创建VM,安装一些免费/试用版邮件客户端,使用Google Mail配置它并尝试发送电子邮件。结果很可能与您的申请相同。