Azure Functions SendGrid 绑定

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

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

安装扩展

你安装的扩展 NuGet 包取决于你在函数应用中使用的 C# 模式:

函数在独立的 C# 工作进程中执行。 若要了解详细信息,请参阅有关在独立工作进程中运行 C# Azure Functions 的指南

扩展的功能因扩展版本而异:

通过安装 NuGet 包 3.x 版将扩展添加到项目。

安装捆绑包

从 Functions 版本 2.x 开始,HTTP 扩展是扩展包的一部分,在 host.json 项目文件中指定。 若要了解详细信息,请参阅扩展捆绑包

此版本的扩展应该已可以通过扩展包版本 2.x 提供给函数应用。

示例

可使用以下 C# 模式之一来创建 C# 函数:

  • 进程内类库:编译的 C# 函数,该函数在与 Functions 运行时相同的进程中运行。
  • 独立工作进程类库:编译的 C# 函数,该函数在独立于运行时的工作进程中运行。 需要独立工作进程才能支持在 LTS 和非 LTS 版 .NET 和 .NET Framework 上运行的 C# 函数。
  • C# 脚本:主要在 Azure 门户中创建 C# 函数时使用。

我们目前没有在函数应用(在独立工作进程中运行)中使用 SendGrid 绑定的示例。

以下示例演示 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
        }]
    };

    return message;
};

完整的 PowerShell 示例当前不可用于 SendGrid 绑定。

下面的示例演示了一个使用 SendGrid 绑定发送电子邮件的 HTTP 触发的函数。 可以在绑定配置中提供默认值。 例如,“发件人”电子邮件地址在“function.json”中配置。

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "type": "httpTrigger",
      "authLevel": "function",
      "direction": "in",
      "name": "req",
      "methods": ["get", "post"]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    },
    {
      "type": "sendGrid",
      "name": "sendGridMessage",
      "direction": "out",
      "apiKey": "SendGrid_API_Key",
      "from": "sender@contoso.com"
    }
  ]
}

以下函数说明了如何为可选属性提供自定义值。

import logging
import json
import azure.functions as func

def main(req: func.HttpRequest, sendGridMessage: func.Out[str]) -> func.HttpResponse:

    value = "Sent from Azure Functions"

    message = {
        "personalizations": [ {
          "to": [{
            "email": "user@contoso.com"
            }]}],
        "subject": "Azure Functions email with SendGrid",
        "content": [{
            "type": "text/plain",
            "value": value }]}

    sendGridMessage.set(json.dumps(message))

    return func.HttpResponse(f"Sent")

以下示例使用 Java 函数运行时库中的 @SendGridOutput 注释来发送使用 SendGrid 输出绑定的电子邮件。

package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

public class HttpTriggerSendGrid {

    @FunctionName("HttpTriggerSendGrid")
    public HttpResponseMessage run(

        @HttpTrigger(
            name = "req",
            methods = { HttpMethod.GET, HttpMethod.POST },
            authLevel = AuthorizationLevel.FUNCTION)
                HttpRequestMessage<Optional<String>> request,

        @SendGridOutput(
            name = "message",
            dataType = "String",
            apiKey = "SendGrid_API_Key",
            to = "user@contoso.com",
            from = "sender@contoso.com",
            subject = "Azure Functions email with SendGrid",
            text = "Sent from Azure Functions")
                OutputBinding<String> message,

        final ExecutionContext context) {

        final String toAddress = "user@contoso.com";
        final String value = "Sent from Azure Functions";

        StringBuilder builder = new StringBuilder()
            .append("{")
            .append("\"personalizations\": [{ \"to\": [{ \"email\": \"%s\"}]}],")
            .append("\"content\": [{\"type\": \"text/plain\", \"value\": \"%s\"}]")
            .append("}");

        final String body = String.format(builder.toString(), toAddress, value);

        message.setValue(body);

        return request.createResponseBuilder(HttpStatus.OK).body("Sent").build();
    }
}

特性

进程内独立工作进程 C# 库都使用属性来定义输出绑定。 C# 脚本改为使用 function.json 配置文件。

独立工作进程函数应用中,SendGridOutputAttribute 支持以下参数:

特性/注释属性 说明
ApiKey 包含 API 密钥的应用设置的名称。 如果未设置,默认应用设置名称为 AzureWebJobsSendGridApiKey
To (可选)收件人的电子邮件地址。
From (可选)发件人的电子邮件地址。
主题 (可选)电子邮件的主题。
文本 (可选)电子邮件内容。

批注

使用 SendGridOutput 注释,可以通过提供以下配置值以声明方式配置 SendGrid 绑定。

配置

下表列出了在 function.json 文件和 SendGrid 特性/注释中可用的绑定配置属性。

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

在绑定中可能会定义可选属性的默认值,并以编程方式添加或重写这些值。

在本地开发时,需要将应用程序设置添加到 Values 集合中的 local.settings.json 文件中。

host.json 设置

本部分介绍版本 2.x 及更高版本中可用于此绑定的配置设置。 host.json 文件中的设置将应用于函数应用实例中的所有函数。 下面的示例 host.json 文件仅包含此绑定的 2.x 版及更高版本设置。 若要详细了解版本 2.x 及更高版本中的函数应用程序配置设置,请参阅 Azure Functions 的 host.json 参考

注意

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

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

后续步骤