Condividi tramite


Associazioni di SendGrid di Funzioni di Azure

Questo articolo illustra come inviare messaggi di posta elettronica usando associazioni 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

Per poter usare questa estensione di associazione nell'app, assicurarsi che il file host.json nella radice del progetto contenga questo extensionBundle riferimento:

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
}

In questo esempio, il version valore di indica all'host di Funzioni di [4.0.0, 5.0.0) usare una versione del bundle che è almeno 4.0.0 ma minore di 5.0.0, che include tutte le versioni potenziali di 4.x. Questa notazione mantiene l'app nella versione secondaria più recente disponibile del bundle di estensione v4.x.

Quando possibile, è consigliabile usare la versione principale del bundle di estensione più recente e consentire al runtime di mantenere automaticamente la versione secondaria più recente. È possibile visualizzare il contenuto del bundle più recente nella pagina di rilascio dei bundle di estensioni. Per altre informazioni, vedere Bundle di estensioni di Funzioni di Azure.

Example

È 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. È necessario un processo di lavoro isolato per supportare le funzioni C# in esecuzione su versioni LTS (Long-Term Support) e non LTS per .NET e .NET Framework.
  • Modello in-process: funzione C# compilata eseguita nello stesso processo del runtime di Funzioni di Azure.
  • 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 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"
        }
    ]
}

La sezione di configurazione illustra queste proprietà.

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

Attributes

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 Description
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.
From (Facoltativo) Indirizzo di posta elettronica del mittente.
Subject (Facoltativo) Oggetto del messaggio di posta elettronica.
Text (Facoltativo) Contenuto del messaggio di posta elettronica.

Annotations

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

Configuration

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

Proprietà di function.json Description
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 è presente un solo valore restituito.
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.
from (Facoltativo) Indirizzo di posta elettronica del mittente.
subject (Facoltativo) Oggetto del messaggio di posta elettronica.
text (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 filelocal.settings.json nella Values raccolta.

impostazioni host.json

Questa sezione descrive le impostazioni di configurazione disponibili per questa associazione nella versione 2.x e successive. Le impostazioni nel file host.json si applicano a tutte le funzioni in un'istanza dell'app per le funzioni. Per altre informazioni sulle impostazioni di configurazione dell'app per le funzioni, vedere informazioni di riferimentohost.json per Funzioni di Azure.

Note

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>"
        }
    }
}
Property Default Description
from n/a Indirizzo di posta elettronica del mittente in tutte le funzioni.

Passaggi successivi