sendgrid向Azure功能中的多个收件人发送电子邮件失败

时间:2018-04-25 13:19:02

标签: c# azure azure-functions sendgrid sendgrid-api-v3

(有关此问题的完整版本,请参阅 https://social.msdn.microsoft.com/Forums/en-US/20bb5b37-82af-4cf3-8a59-04e5f19572bc/send-email-to-multiple-recipients-using-sendgrid-failure?forum=AzureFunctions

发送给单个收件人是成功的。但是发现无法在Azure功能中发送给多个收件人或CC / BCC。

尝试了几种格式,包括

{ "to": [{ "email": ["john.doe@example.com", "sendgridtesting@gmail.com" ] }] }

似乎是天蓝色功能的极限。但不确定哪里出了问题。请参阅下面的“绑定”,

{

"bindings": [

{

"name": "telemetryEvent",

"type": "serviceBusTrigger", 

"direction": "in",

"queueName": "threshold-email-queue",

"connection": "RootManageSharedAccessKey_SERVICEBUS",

"accessRights": "Manage"

},

{

"type": "sendGrid",

"name": "$return",

"apiKey": "SendGridKey",

"direction": "out",

"from": "ABC@sample.com",

"to": [{
"email": ["test1@sample1.com", "test2@sample2.com" ]
}]

}

],
"disabled": false

}

2 个答案:

答案 0 :(得分:0)

我使用HTTP触发器做了我的示例,但基于此,您将能够使用Service Bus触发器。

my function.json:

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "sendGrid",
      "name": "mails",
      "apiKey": "MySendGridKey",
      "direction": "out",
      "from":"samples@functions.com"
    }
  ],
  "disabled": false
}

我的run.csx:

#r "SendGrid"

using System;
using System.Net;
using SendGrid.Helpers.Mail;

public static HttpResponseMessage Run(HttpRequestMessage req, TraceWriter log, ICollector<Mail> mails)
{
    log.Info("C# HTTP trigger function processed a request.");

    Mail message = new Mail()
    {
        Subject = $"Hello world from the SendGrid C#!"
    };

    var personalization = new Personalization();
    personalization.AddTo(new Email("foo@bar.com"));  
    personalization.AddTo(new Email("foo2@bar.com")); 
    // you can add some more recipients here 

    Content content = new Content
    {
        Type = "text/plain",
        Value = $"Hello world!"
    };

    message.AddContent(content);  
    message.AddPersonalization(personalization); 
    mails.Add(message);

    return null;
}

我使用此源代码构建我的示例: Azure Function SendGrid

答案 1 :(得分:0)

感谢TamásHuj,该功能现在可以完成这项工作。所以我详细发布了解决方案供其他人参考。

{
"bindings": [

{

"name": "telemetryEvent",

"type": "serviceBusTrigger", 

"direction": "in",

"queueName": "threshold-email-queue",

"connection": "RootManageSharedAccessKey_SERVICEBUS",

"accessRights": "Manage"

},

{

"type": "sendGrid",

"name": "$return",

"apiKey": "SendGridKey",

"direction": "out",

"from": "ABC@sample.com"

}

],
"disabled": false

}

然后将run.csx写为:

#r "SendGrid"
#r "Newtonsoft.Json"

using System;
using SendGrid.Helpers.Mail;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;

public static Mail Run(string telemetryEvent, TraceWriter log)
{
    var telemetry = JsonConvert.DeserializeObject<Telemetry>(telemetryEvent);

Mail message = new Mail()
{
    Subject = "Write your own subject"
};

var personalization = new Personalization();
personalization.AddBcc(new Email("sample1@test.com"));  
personalization.AddTo(new Email("sample2@test.com")); 
//add more Bcc,cc and to here as needed

Content content = new Content
{
    Type = "text/plain",
    Value = $"The temperature value is{temperature.Temperature}."
};

message.AddContent(content); 
message.AddPersonalization(personalization); 

    return message;
}


public class Telemetry 
{
    public float Temperature { get; set; }
}