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。
答案 0 :(得分:2)
从公共云发送电子邮件并不像有些人认为的那样微不足道。为了不被列入黑名单,有很多事情需要弄清楚。特别是当您打算使用公共邮件服务时。
我的第一个猜测是,Azure数据中心的IP地址(或您托管的地址)可能会被邮件服务器(包括Microsoft自己的Office 365)列入黑名单。
我还要提到,使用SendGrid从Azure托管的应用程序发送电子邮件的推荐方法。他们有免费套餐。更多信息from Microsoft on that subject, can be found here。
解决问题的确切原因的唯一方法是联系GMail支持并询问他们是否以任何方式阻止从Azure云连接的网络客户端。或者在您的Web应用程序所在的同一数据中心中创建VM,安装一些免费/试用版邮件客户端,使用Google Mail配置它并尝试发送电子邮件。结果很可能与您的申请相同。