Azure Functions SendGrid 绑定

本文介绍如何使用 Azure Functions 中的 SendGrid 绑定发送电子邮件。 Azure Functions 支持 SendGrid 的输出绑定。

此参考信息面向 Azure Functions 开发人员。 Azure Functions 的新手请从以下资源入手:

包 - Functions 1.x

Microsoft.Azure.WebJobs.Extensions.SendGrid NuGet 包 2.x 版本中提供了 SendGrid 绑定。 azure-webjobs-sdk-extensions GitHub 存储库中提供了此包的源代码。

下表说明了如何在每个开发环境中添加对此绑定的支持。

开发环境 添加支持
Functions 1.x
本地开发 - C# 类库 安装包
本地开发 - C# 脚本、JavaScript、F# 自动
门户开发 自动

包 - Functions 2.x

Microsoft.Azure.WebJobs.Extensions.SendGrid NuGet 包 3.x 版本中提供了 SendGrid 绑定。 azure-webjobs-sdk-extensions GitHub 存储库中提供了此包的源代码。

下表说明了如何在每个开发环境中添加对此绑定的支持。

开发环境 添加支持
Functions 2.x
本地开发 - C# 类库 安装包
本地开发 - C# 脚本、JavaScript、F#、Java 和 Python 注册扩展
门户开发 添加输出绑定时安装

若要了解如何更新门户中的现有绑定扩展而不必重新发布函数应用项目,请参阅更新扩展

示例

参阅语言特定的示例:

C# 示例

以下示例演示使用服务总线队列触发器和 SendGrid 输出绑定的 C# 函数

同步 C# 示例:

[FunctionName("SendEmail")]
public static void Run(
    [ServiceBusTrigger("myqueue", Connection = "ServiceBusConnection")] Message email,
    [SendGrid(ApiKey = "CustomSendGridKeyAppSettingName")] out SendGridMessage message)
{
var emailObject = JsonConvert.DeserializeObject<OutgoingEmail>(Encoding.UTF8.GetString(email.Body));

message = new SendGridMessage();
message.AddTo(emailObject.To);
message.AddContent("text/html", emailObject.Body);
message.SetFrom(new EmailAddress(emailObject.From));
message.SetSubject(emailObject.Subject);
}

public class OutgoingEmail
{
    public string To { get; set; }
    public string From { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
}

异步 C# 示例:

[FunctionName("SendEmail")]
public static async void Run(
 [ServiceBusTrigger("myqueue", Connection = "ServiceBusConnection")] Message email,
 [SendGrid(ApiKey = "CustomSendGridKeyAppSettingName")] IAsyncCollector<SendGridMessage> messageCollector)
{
 var emailObject = JsonConvert.DeserializeObject<OutgoingEmail>(Encoding.UTF8.GetString(email.Body));

 var message = new SendGridMessage();
 message.AddTo(emailObject.To);
 message.AddContent("text/html", emailObject.Body);
 message.SetFrom(new EmailAddress(emailObject.From));
 message.SetSubject(emailObject.Subject);

 await messageCollector.AddAsync(message);
}

public class OutgoingEmail
{
 public string To { get; set; }
 public string From { get; set; }
 public string Subject { get; set; }
 public string Body { get; set; }
}

如果在应用设置中指定了名为“AzureWebJobsSendGridApiKey”的 API 密钥,则可以不设置特性的 ApiKey 属性。

C# 脚本示例

以下示例演示 function.json 文件中的一个 SendGrid 输出绑定以及使用该绑定的 C# 脚本函数

下面是 function.json 文件中的绑定数据:

{
    "bindings": [
        {
          "type": "queueTrigger",
          "name": "mymsg",
          "queueName": "myqueue",
          "connection": "AzureWebJobsStorage",
          "direction": "in"
        },
        {
          "type": "sendGrid",
          "name": "$return",
          "direction": "out",
          "apiKey": "SendGridAPIKeyAsAppSetting",
          "from": "{FromEmail}",
          "to": "{ToEmail}"
        }
    ]
}

配置部分解释了这些属性。

C# 脚本代码如下所示:

#r "SendGrid"

using System;
using SendGrid.Helpers.Mail;
using Microsoft.Azure.WebJobs.Host;

public static SendGridMessage Run(Message mymsg, ILogger log)
{
    SendGridMessage message = new SendGridMessage()
    {
        Subject = $"{mymsg.Subject}"
    };

    message.AddContent("text/plain", $"{mymsg.Content}");

    return message;
}
public class Message
{
    public string ToEmail { get; set; }
    public string FromEmail { get; set; }
    public string Subject { get; set; }
    public string Content { get; set; }
}

JavaScript 示例

以下示例演示 function.json 文件中的一个 SendGrid 输出绑定以及使用该绑定的 JavaScript 函数

下面是 function.json 文件中的绑定数据:

{
    "bindings": [
        {
            "name": "$return",
            "type": "sendGrid",
            "direction": "out",
            "apiKey" : "MySendGridKey",
            "to": "{ToEmail}",
            "from": "{FromEmail}",
            "subject": "SendGrid output bindings"
        }
    ]
}

配置部分解释了这些属性。

JavaScript 代码如下所示:

module.exports = function (context, input) {    
    var message = {
         "personalizations": [ { "to": [ { "email": "sample@sample.com" } ] } ],
        from: { email: "sender@contoso.com" },        
        subject: "Azure news",
        content: [{
            type: 'text/plain',
            value: input
        }]
    };

    context.done(null, message);
};

属性

C# 类库中,使用 SendGrid 特性。

有关可以配置的特性属性的信息,请参阅配置。 下面是某个方法签名中的 SendGrid 特性示例:

[FunctionName("SendEmail")]
public static void Run(
    [ServiceBusTrigger("myqueue", Connection = "ServiceBusConnection")] OutgoingEmail email,
    [SendGrid(ApiKey = "CustomSendGridKeyAppSettingName")] out SendGridMessage message)
{
    ...
}

有关完整示例,请参阅 C# 示例

配置

下表解释了在 function.json 文件和 SendGrid 特性中设置的绑定配置属性。

function.json 属性 Attribute 属性 说明
类型 必需 - 必须设置为 sendGrid
direction 必需 - 必须设置为 out
name 必需 - 在请求或请求正文的函数代码中使用的变量名称。 只有一个返回值时,此值为 $return
apiKey ApiKey 包含 API 密钥的应用设置的名称。 如果未设置,默认应用设置名称为“AzureWebJobsSendGridApiKey”。
to To 收件人的电子邮件地址。
from From 发件人的电子邮件地址。
subject 主题 电子邮件主题。
text 文本 电子邮件内容。

在本地进行开发时,应用设置将取 local.settings.json 文件的值。

host.json 设置

本部分介绍版本 2.x 中可用于此绑定的全局配置设置。 下面的示例 host.json 文件仅包含此绑定的 2.x 版本设置。 有关版本 2.x 中的全局配置设置的详细信息,请参阅 Azure Functions 版本 2.x 的 host.json 参考

Note

有关 Functions 1.x 中 host.json 的参考,请参阅 Azure Functions 1.x 的 host.json 参考

{
    "version": "2.0",
    "extensions": {
        "sendGrid": {
            "from": "Azure Functions <samples@functions.com>"
        }
    }
}
属性 默认 说明
from 不适用 所有函数的发件人电子邮件地址。

后续步骤