Azure Functions における SendGrid のバインディングAzure Functions SendGrid bindings

この記事では、Azure Functions で SendGrid のバインディングを使用して電子メールを送信する方法について説明します。This article explains how to send email by using SendGrid bindings in Azure Functions. Azure Functions では、SendGrid 用の出力バインディングがサポートされています。Azure Functions supports an output binding for SendGrid.

これは、Azure Functions の開発者向けリファレンス情報です。This is reference information for Azure Functions developers. Azure Functions を初めて使用する場合は、先に次のリソースを参照してください。If you're new to Azure Functions, start with the following resources:

パッケージ - Functions 1.xPackages - Functions 1.x

SendGrid バインディングは Microsoft.Azure.WebJobs.Extensions.SendGrid NuGet パッケージ、バージョン 2.x で提供されます。The SendGrid bindings are provided in the Microsoft.Azure.WebJobs.Extensions.SendGrid NuGet package, version 2.x. パッケージのソース コードは、azure-webjobs-sdk-extensions GitHub リポジトリにあります。Source code for the package is in the azure-webjobs-sdk-extensions GitHub repository.

次の表に、各開発環境でこのバインディングのサポートを追加する方法を示します。The following table tells how to add support for this binding in each development environment.

開発環境Development environment サポートを追加するバージョン:To add support in
Functions 1.xFunctions 1.x
ローカル開発 - C# クラス ライブラリLocal development - C# class library パッケージをインストールするInstall the package
ローカル開発で - C# スクリプト、JavaScript、F#Local development - C# script, JavaScript, F# 自動Automatic
Portal 開発Portal development 自動Automatic

パッケージ - Functions 2.xPackages - Functions 2.x

SendGrid バインディングは Microsoft.Azure.WebJobs.Extensions.SendGrid NuGet パッケージ、バージョン 3.x で提供されます。The SendGrid bindings are provided in the Microsoft.Azure.WebJobs.Extensions.SendGrid NuGet package, version 3.x. パッケージのソース コードは、azure-webjobs-sdk-extensions GitHub リポジトリにあります。Source code for the package is in the azure-webjobs-sdk-extensions GitHub repository.

次の表に、各開発環境でこのバインディングのサポートを追加する方法を示します。The following table tells how to add support for this binding in each development environment.

開発環境Development environment サポートを追加するバージョン:To add support in
Functions 2.xFunctions 2.x
ローカル開発 - C# クラス ライブラリLocal development - C# class library パッケージをインストールするInstall the package
ローカル開発で - C# スクリプト、JavaScript、F#、Java、PythonLocal development - C# script, JavaScript, F#, Java and Python 拡張機能を登録するRegister the extension
Portal 開発Portal development 出力バインドの追加時にインストールするInstall when adding output binding

関数アプリ プロジェクトを再発行せずにポータルで既存のバインディング拡張機能を更新する方法については、拡張機能の更新に関するページを参照してください。To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

Example

言語固有の例をご覧ください。See the language-specific example:

C# の例C# example

次の例は、Service Bus キュー トリガーと SendGrid 出力バインディングを使用する C# 関数を示しています。The following example shows a C# function that uses a Service Bus queue trigger and a SendGrid output binding.

同期 C# の例:Synchronous C# example:

[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# の例:Asynchronous C# example:

[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 プロパティの設定を省略できます。You can omit setting the attribute's ApiKey property if you have your API key in an app setting named "AzureWebJobsSendGridApiKey".

C# スクリプトの例C# script example

次の例は、function.json ファイルの Service SendGrid 出力バインディングと、そのバインディングを使用する C# スクリプト関数を示しています。The following example shows a SendGrid output binding in a function.json file and a C# script function that uses the binding.

function.json ファイルのバインディング データを次に示します。Here's the binding data in the function.json file:

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

これらのプロパティについては、「構成」セクションを参照してください。The configuration section explains these properties.

C# スクリプト コードを次に示します。Here's the C# script code:

#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; }
}

Java の例Java example

次の例では、SendGrid 出力バインディングを使用してメールを送信するために、Java 関数ランタイム ライブラリ@SendGridOutput 注釈を使用しています。The following example uses the @SendGridOutput annotation from the Java functions runtime library to send an email using the SendGrid output binding.

@FunctionName("SendEmail")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> request,
            @SendGridOutput(
                name = "email", dataType = "String", apiKey = "SendGridConnection", to = "test@example.com", from = "test@example.com",
                subject= "Sending with SendGrid", text = "Hello from Azure Functions"
                ) OutputBinding<String> email
            )
    {
        String name = request.getBody().orElse("World");

        final String emailBody = "{\"personalizations\":" +
                                    "[{\"to\":[{\"email\":\"test@example.com\"}]," +
                                    "\"subject\":\"Sending with SendGrid\"}]," +
                                    "\"from\":{\"email\":\"test@example.com\"}," +
                                    "\"content\":[{\"type\":\"text/plain\",\"value\": \"Hello" + name + "\"}]}";

        email.setValue(emailBody);
        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }

JavaScript の例JavaScript example

次の例は、function.json ファイルの Service SendGrid 出力バインディングと、そのバインディングを使用する JavaScript 関数を示しています。The following example shows a SendGrid output binding in a function.json file and a JavaScript function that uses the binding.

function.json ファイルのバインディング データを次に示します。Here's the binding data in the function.json file:

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

これらのプロパティについては、「構成」セクションを参照してください。The configuration section explains these properties.

JavaScript コードを次に示します。Here's the JavaScript code:

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);
};

属性Attributes

C# クラス ライブラリでは、SendGrid 属性を使用します。In C# class libraries, use the SendGrid attribute.

構成可能な属性プロパティについては、構成を参照してください。For information about attribute properties that you can configure, see Configuration. メソッド シグネチャでの SendGrid 属性の例を次に示します。Here's a SendGrid attribute example in a method signature:

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

完全な例については、「C# の例」を参照してください。For a complete example, see C# example.

構成Configuration

次の表は、function.json ファイルと SendGrid 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the SendGrid attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
typetype 必須 - sendGrid に設定する必要があります。Required - must be set to sendGrid.
directiondirection 必須 - out に設定する必要があります。Required - must be set to out.
namename 必須 - 要求または要求本文の関数コードで使用される変数名。Required - the variable name used in function code for the request or request body. 戻り値が 1 つの場合、この値は $return です。This value is $return when there is only one return value.
apiKeyapiKey ApiKeyApiKey API キーを含むアプリ設定の名前。The name of an app setting that contains your API key. 設定されていない場合、既定のアプリの設定名は"AzureWebJobsSendGridApiKey" です。If not set, the default app setting name is "AzureWebJobsSendGridApiKey".
toto ToTo 受信者の電子メール アドレス。the recipient's email address.
fromfrom FromFrom 送信者の電子メール アドレス。the sender's email address.
subjectsubject [件名]Subject 電子メールの件名。the subject of the email.
texttext テキストText 電子メールの本文。the email content.

ローカルで開発している場合、アプリ設定は local.settings.json ファイルに保存されます。When you're developing locally, app settings go into the local.settings.json file.

host.json 設定host.json settings

このセクションでは、バージョン 2.x でこのバインディングに使用可能なグローバル構成設定について説明します。This section describes the global configuration settings available for this binding in version 2.x. 次の host.json ファイルの例には、このバインディングのバージョン 2.x の設定のみが含まれています。The example host.json file below contains only the version 2.x settings for this binding. バージョン 2.x でのグローバル構成設定の詳細については、Azure Functions バージョン 2.x の host.json のリファレンスを参照してください。For more information about global configuration settings in version 2.x, see host.json reference for Azure Functions version 2.x.

注意

Functions 1.x の host.json のリファレンスについては、「host.json reference for Azure Functions 1.x (Azure Functions 1.x の host.json のリファレンス)」を参照してください。For a reference of host.json in Functions 1.x, see host.json reference for Azure Functions 1.x.

{
    "version": "2.0",
    "extensions": {
        "sendGrid": {
            "from": "Azure Functions <samples@functions.com>"
        }
    }
}
プロパティProperty 既定値Default 説明Description
fromfrom 該当なしn/a すべての関数の送信者の電子メール アドレス。The sender's email address across all functions.

次の手順Next steps