Associazioni di SendGrid di Funzioni di Azure

Questo articolo illustra come inviare messaggi di posta elettronica tramite le associazioni di SendGrid in Funzioni di Azure. Funzioni di Azure supporta un'associazione di output per SendGrid.

Informazioni di riferimento per gli sviluppatori delle Funzioni di Azure. Se non si ha familiarità con le Funzioni di Azure, iniziare con le seguenti risorse:

Installare l'estensione

Il pacchetto NuGet di estensione installato dipende dalla modalità C# usata nell'app per le funzioni:

Le funzioni sono eseguite in un processo di lavoro C# isolato. Per altre informazioni, vedere Guida per l'esecuzione di Funzioni di Azure C# in un processo di lavoro isolato.

La funzionalità dell'estensione varia a seconda della versione dell'estensione:

Aggiungere l'estensione al progetto installando il pacchetto NuGet versione 3.x.

Installare il bundle

A partire da Funzioni versione 2.x, l'estensione HTTP fa parte di un bundle di estensione, specificato nel file di progetto host.json. Per altre informazioni, vedere bundle di estensioni.

Questa versione dell'estensione dovrebbe essere già disponibile per l'app per le funzioni con bundle di estensione versione 2.x.

Esempio

È possibile creare una funzione C# usando una delle modalità C# seguenti:

  • Modello di lavoro isolato: funzione C# compilata eseguita in un processo di lavoro isolato dal runtime. Il processo di lavoro isolato è necessario per supportare le funzioni C# in esecuzione in LTS e versioni non LTS .NET e .NET Framework.
  • Modello in-process: funzione C# compilata eseguita nello stesso processo del runtime di Funzioni.
  • Script C#: usato principalmente quando si creano funzioni C# nel portale di Azure.

Attualmente non è disponibile un esempio per l'uso dell'associazione SendGrid in un'app per le funzioni in esecuzione in un processo di lavoro isolato.

L'esempio seguente mostra un'associazione di output di SendGrid in un file function.json e una funzione JavaScript che usa l'associazione.

Ecco i dati di associazione nel file function.json:

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

Queste proprietà sono descritte nella sezione configuration.

Ecco il codice 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;
};

Gli esempi di PowerShell completi non sono attualmente disponibili per le associazioni SendGrid.

L'esempio seguente mostra una funzione attivata da HTTP che invia un messaggio di posta elettronica usando l'associazione SendGrid. È possibile specificare i valori predefiniti nella configurazione dell'associazione. Ad esempio, l'indirizzo di posta elettronica da viene configurato in 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"
    }
  ]
}

La funzione seguente illustra come specificare valori personalizzati per le proprietà facoltative.

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")

Nell'esempio seguente viene usata l'annotazione @SendGridOutput della libreria di runtime delle funzioni Java per inviare un messaggio di posta elettronica usando l'associazione di output 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();
    }
}

Attributi

Sia le librerie C# in-process che il processo di lavoro isolato usano attributi per definire l'associazione di output. Lo script C# usa invece un file di configurazione function.json.

Nelle app per le funzioni del processo di lavoro isolato supporta SendGridOutputAttribute i parametri seguenti:

Proprietà attribute/annotation Descrizione
ApiKey Il nome di un'impostazione dell'app che contiene la chiave API. Se non è impostato, il nome predefinito dell'impostazione dell'app è AzureWebJobsSendGridApiKey.
Per (Facoltativo) Indirizzo di posta elettronica del destinatario.
Da (Facoltativo) Indirizzo di posta elettronica del mittente.
Argomento (Facoltativo) Oggetto del messaggio di posta elettronica.
Text (Facoltativo) Contenuto del messaggio di posta elettronica.

Annotazioni

L'annotazione SendGridOutput consente di configurare in modo dichiarativo l'associazione SendGrid specificando i valori di configurazione seguenti.

Impostazione

Nella tabella seguente sono elencate le proprietà di configurazione dell'associazione disponibili nel file di function.json e nell'attributo SendGrid /annotazione.

function.json proprietà Descrizione
type Deve essere impostato su sendGrid.
direction Deve essere impostato su out.
name Nome della variabile usato nel codice della funzione per il corpo della richiesta o della richiesta. Questo valore è $return quando viene restituito un solo valore.
apiKey Il nome di un'impostazione dell'app che contiene la chiave API. Se non è impostato, il nome predefinito dell'impostazione dell'app è AzureWebJobsSendGridApiKey.
to (Facoltativo) Indirizzo di posta elettronica del destinatario.
da (Facoltativo) Indirizzo di posta elettronica del mittente.
subject (Facoltativo) Oggetto del messaggio di posta elettronica.
Testo (Facoltativo) Contenuto del messaggio di posta elettronica.

Le proprietà facoltative possono avere valori predefiniti definiti nell'associazione e aggiunti o sottoposti a override a livello di codice.

Quando si sviluppa in locale, aggiungere le impostazioni dell'applicazione nel file local.settings.json nella Values raccolta.

impostazioni host.json

Questa sezione descrive le impostazioni di configurazione disponibili per questa associazione nelle versioni 2.x e successive. Le impostazioni nel file host.json si applicano a tutte le funzioni in un'istanza dell'app per le funzioni. L'esempio host.json file seguente contiene solo le impostazioni della versione 2.x+ per questa associazione. Per altre informazioni sulle impostazioni di configurazione delle app per le funzioni nelle versioni 2.x e successive, vedere informazioni di riferimento host.json per Funzioni di Azure.

Nota

Per informazioni di riferimento su host.json in Funzioni 1.x, vedere Informazioni di riferimento su host.json per Funzioni di Azure 1.x.

{
    "version": "2.0",
    "extensions": {
        "sendGrid": {
            "from": "Azure Functions <samples@functions.com>"
        }
    }
}
Proprietà Predefinito Descrizione
da n/d Indirizzo di posta elettronica del mittente in tutte le funzioni.

Passaggi successivi