SendGrid无法在Azure App Service中运行

sev*_*rin 7 c# azure sendgrid asp.net-core-1.0

我使用最新的SendGrid .NET包(8.0.3)从我的ASP.NET Core Web应用程序发送电子邮件:

public Task SendEmailAsync(string email, string subject, string message)
{
    return Send(email, subject, message);

}

async Task Send(string email, string subject, string message)
{
    dynamic sg = new SendGridAPIClient(_apiKey);

    var from = new Email("noreply@my.domain", "My Name");
    var to = new Email(email);
    var content = new Content("text/html", message);
    var mail = new Mail(from, subject, to, content);

    await sg.client.mail.send.post(requestBody: mail.Get());
}
Run Code Online (Sandbox Code Playgroud)

它在本地工作,但在Azure App Service实例上运行时,邮件无法通过.

代码运行良好,没有任何例外,所以我几乎无法使用,但我认为它可能是某种防火墙问题.

有没有人遇到类似的问题?我该如何调试呢?

Tre*_*vor 0

我也在我的 Azure Web 应用程序中使用 SendGrid。我可以在本地调试时以及在 Azure 中部署到生产环境后发送。以下是需要检查的几件事:

  1. API 密钥 - API 密钥显然是必需的;仔细检查你是如何填充它的。通常该值是通过配置设置的。您部署的配置值与本地运行时的值相同吗?也许您在部署过程中遇到了 web.config 转换的问题,或者您可能应该进行覆盖设置(如果您使用的是 Web 应用服务,则在应用程序的应用程序设置中设置)。
  2. SendGrid 活动和抑制 - 您检查过 SendGrid 的活动日志吗?问题可能在于将您的请求发送给 SendGrid,也可能是 SendGrid 正在获取您的请求但未满足它。检查活动源并搜索您想要的特定电子邮件(日志可搜索并按时间排序)。如果您在此处看到与您的电子邮件相对应的日志,则问题出在 SendGrid 端。有时,电子邮件会被抑制,其发生的原因有很多(退回邮件、被标记为垃圾邮件,甚至您的 DNS 服务器无法用于域所有权验证)。如果是这种情况,日志将提供证据。您也可以直接转到抑制并在那里搜索电子邮件地址。
  3. 网络可用性 - 如果您使用 Web 应用程序服务托管应用程序(看起来就是这样),那么您可以假设您的 Web 应用程序可以发出网络请求,这显然是访问 SendGrid API 或 SMTP 服务器所必需的。但是,如果您将应用程序部署到 Azure 中托管的 VM,则可能会遇到一些问题,例如防火墙。登录虚拟机并手动确认您可以直接向 SendGrid API 发出网络请求。