Enlaces de SendGrid de Azure Functions

En este artículo se explica cómo enviar correos electrónicos mediante los enlaces de SendGrid en Azure Functions. Azure Functions admite un enlace de salida para SendGrid.

Esta es la información de referencia para desarrolladores de Azure Functions. Si está familiarizado con Azure Functions, comience con los siguientes recursos:

Instalación de la extensión

El paquete NuGet de la extensión que instale depende del modo de C# que esté usando en la aplicación de funciones:

Las funciones se ejecutan en un proceso de trabajo de C# aislado. Para más información, consulte Guía para ejecutar C# Azure Functions en un proceso de trabajo aislado.

La funcionalidad de la extensión varía en función de la versión de la extensión:

Para agregar la extensión al proyecto, instale el paquete NuGet, versión 3.x.

Instalación del conjunto

A partir de Functions, versión 2.x, la extensión HTTP forma parte de un conjunto de extensiones, que se especifica en el archivo de proyecto host.json. Para obtener más información, consulte Conjuntos de extensiones.

Esta versión de la extensión ya debe estar disponible para la aplicación de función con el conjunto de extensiones, versión 2.x.

Ejemplo

Se puede crear una función C# mediante uno de los siguientes modos de C#:

  • Modelo de trabajo aislado: función compilada en C# que se ejecuta en un proceso trabajador aislado del tiempo de ejecución. Se requiere un proceso de trabajo aislado para admitir funciones de C# ejecutándose en versiones de .NET que son y no son LTS y .NET Framework.
  • Modelo en curso: función C# compilada que se ejecuta en el mismo proceso que el tiempo de ejecución de Functions.
  • Script de C#: se usa principalmente al crear funciones de C# en Azure Portal.

Actualmente no tenemos un ejemplo para usar el enlace de SendGrid en una aplicación de funciones que se ejecuta en un proceso de trabajo aislado.

En el ejemplo siguiente se muestra un enlace de salida de SendGrid en un archivo function.json y una función de JavaScript que usa el enlace.

Estos son los datos de enlace del archivo function.json:

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

En la sección de configuración se explican estas propiedades.

Este es el código de 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;
};

Los ejemplos completos de PowerShell no están disponibles actualmente para los enlaces de SendGrid.

En el ejemplo siguiente se muestra una función desencadenada por HTTP que envía un correo electrónico mediante el enlace de SendGrid. Puede proporcionar valores predeterminados en la configuración del enlace. Por ejemplo, la dirección de correo electrónico de se configura en 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 siguiente función muestra cómo puede proporcionar valores personalizados para propiedades opcionales.

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

En el ejemplo siguiente se usa la anotación @SendGridOutput de la biblioteca en tiempo de ejecución de funciones de Java para enviar un correo electrónico mediante el enlace de salida de 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();
    }
}

Atributos

Las bibliotecas de C# en proceso y de proceso de trabajo aislado usan atributos para definir el enlace de salida. El script de C#, en su lugar, usa un archivo de configuración function.json.

En las aplicaciones de funciones que están en un proceso de trabajo aislado, SendGridOutputAttribute admite los parámetros siguientes:

Propiedad de atributo/anotación Descripción
ApiKey El nombre de una configuración de aplicación que contiene la clave de API. Si no está establecido, el nombre predeterminado de la configuración de aplicación es AzureWebJobsSendGridApiKey.
To (Opcional) Dirección de correo electrónico del destinatario.
From (Opcional) Dirección de correo electrónico del remitente.
Subject (Opcional) Asunto del correo electrónico.
Text (Opcional) Contenido del correo electrónico.

anotaciones

La anotación SendGridOutput permite configurar el enlace de SendGrid mediante declaración proporcionando valores de configuración siguientes.

Configuración

En la siguiente tabla se enumeran las propiedades de configuración de enlace disponibles en el archivo function.json y el atributo/anotación SendGrid.

Propiedad de function.json Descripción
type Se debe establecer en sendGrid.
direction Se debe establecer en out.
name El nombre de variable que se usa en el código de función para la solicitud o el cuerpo de la solicitud. Este valor es $return cuando hay solo un valor de devuelto.
apiKey El nombre de una configuración de aplicación que contiene la clave de API. Si no está establecido, el nombre predeterminado de la configuración de aplicación es AzureWebJobsSendGridApiKey.
to (Opcional) Dirección de correo electrónico del destinatario.
from (Opcional) Dirección de correo electrónico del remitente.
subject (Opcional) Asunto del correo electrónico.
text (Opcional) Contenido del correo electrónico.

Las propiedades opcionales pueden tener valores predeterminados definidos en el enlace y agregarse o reemplazarse mediante programación.

Cuando esté desarrollando localmente, agregue la configuración de la aplicación en el archivo local.settings.json de la colección Values.

configuración de host.json

En esta sección se describen las opciones de configuración disponibles para este enlace en las versiones 2.x y posteriores. La configuración del archivo host.json se aplica a todas las funciones de una instancia de la aplicación de funciones. El siguiente archivo host.json de ejemplo contiene solo la configuración de la versión 2.x+ para este enlace. Para obtener más información sobre la configuración de la aplicación de funciones en las versiones 2.x y posteriores, consulte la referencia de host.json para Azure Functions.

Nota

Para obtener una referencia de host.json en Functions 1.x, consulte la referencia de host.json para Azure Functions, versión 1.x.

{
    "version": "2.0",
    "extensions": {
        "sendGrid": {
            "from": "Azure Functions <samples@functions.com>"
        }
    }
}
Propiedad Valor predeterminado Descripción
from N/D Dirección de correo electrónico del remitente en todas las funciones.

Pasos siguientes