使用Azure应用服务webjob的sendgrid发送邮件

时间:2019-09-03 22:07:15

标签: azure sendgrid sendgrid-api-v3

我已经开发了一个C#控制台应用程序,可以在某些情况下向我们的客户发送电子邮件。将应用程序部署为天蓝色的webjob时,不发送邮件。

在我的开发环境中从Visual Studio中进行测试时,发送邮件时没有出现预期的任何问题,但是当应用程序作为天蓝色的应用程序服务webjob部署并运行时,不会发送任何邮件。当部署为天蓝色的webjob时,该应用程序还可以按预期运行。

public enum MailType : short { Plain, Html }

private static string MimeType(MailType type) 
{ return (type == MailType.Html) ? "text/html" : "text/plain";  }

private static async Task sendMail(string to, string name, string subject, MailType mailType, string content)
{
    SendGridMessage msg = new SendGridMessage();
    msg.From = new EmailAddress("noreply@foo.org", "Foo Ltd.");
    msg.AddTo(to, name);
    msg.Subject = subject;
    msg.AddContent(MimeType(mailType), content);
    SendGridClient client = new SendGridClient(SendGridAPIKey);
    await client.SendEmailAsync(msg);
}

public static void SendMail(string to, string name, string subject, MailType mailType, string content)
{
    sendMail(to, name, subject, mailType, content).Wait();
}

与该问题有关的所有其他问题(许多开发人员已解决此问题)的答案都集中在代码上;特别是异步实现,但这似乎不是问题。 azure对部署为webjob的应用程序与sendgrid服务器之间的通信是否有一些限制? (我正在使用sendgrid和sendgrid.helpers.mail)

1 个答案:

答案 0 :(得分:0)

我与您一起测试了代码,它在本地和Azure上均能很好地工作。我在queueTrigger中调用SendMail方法。

public static void ProcessQueueMessage([QueueTrigger("queue1")] string message, TextWriter log)
{
    log.WriteLine(message);
    SendMail("xxxxx@gmail.com", "xxxxx", "hello world", MailType.Plain, "have a good day.");
}

因此,您可以参考以下方法进行故障排除。

1。检查您的SendGridAPIKey。如果您将SendGridAPIKey作为环境变量存储在项目中,则需要转到Configuration> Application Settings并在其中添加密钥。

2。检查您的SendGrid活动。问题可能是将您的请求发送到SendGrid,或者可能是SendGrid收到了您的请求但未实现。检查活动供稿并搜索您需要的特定电子邮件