Enlaces de SendGrid de Azure FunctionsAzure Functions SendGrid bindings

En este artículo se explica cómo enviar correos electrónicos mediante los enlaces de SendGrid en Azure Functions.This article explains how to send email by using SendGrid bindings in Azure Functions. Azure Functions admite un enlace de salida para SendGrid.Azure Functions supports an output binding for SendGrid.

Esta es la información de referencia para desarrolladores de Azure Functions.This is reference information for Azure Functions developers. Si está familiarizado con Azure Functions, comience con los siguientes recursos:If you're new to Azure Functions, start with the following resources:

Paquetes: Functions 1.xPackages - Functions 1.x

Los enlaces de SendGrid se proporcionan en el paquete NuGet Microsoft.Azure.WebJobs.Extensions.SendGrid, versión 2.x.The SendGrid bindings are provided in the Microsoft.Azure.WebJobs.Extensions.SendGrid NuGet package, version 2.x. El código fuente del paquete está en el repositorio azure-webjobs-sdk-extensions de GitHub.Source code for the package is in the azure-webjobs-sdk-extensions GitHub repository.

En la siguiente tabla se explica cómo agregar compatibilidad para este enlace en cada entorno de desarrollo.The following table tells how to add support for this binding in each development environment.

Entorno de desarrolloDevelopment environment Para agregar compatibilidad enTo add support in
Functions 1.xFunctions 1.x
Desarrollo local: biblioteca de clases C#Local development - C# class library Instalación del paqueteInstall the package
Desarrollo local: script de C#, JavaScript, F#Local development - C# script, JavaScript, F# AutomáticoAutomatic
Desarrollo con PortalPortal development AutomáticoAutomatic

Paquetes: Functions 2.xPackages - Functions 2.x

Los enlaces de SendGrid se proporcionan en el paquete NuGet Microsoft.Azure.WebJobs.Extensions.SendGrid, versión 3.x.The SendGrid bindings are provided in the Microsoft.Azure.WebJobs.Extensions.SendGrid NuGet package, version 3.x. El código fuente del paquete está en el repositorio azure-webjobs-sdk-extensions de GitHub.Source code for the package is in the azure-webjobs-sdk-extensions GitHub repository.

En la siguiente tabla se explica cómo agregar compatibilidad para este enlace en cada entorno de desarrollo.The following table tells how to add support for this binding in each development environment.

Entorno de desarrolloDevelopment environment Para agregar compatibilidad enTo add support in
Functions 2.xFunctions 2.x
Desarrollo local: biblioteca de clases C#Local development - C# class library Instalación del paqueteInstall the package
Desarrollo local: script de C#, JavaScript, F#, Java y PythonLocal development - C# script, JavaScript, F#, Java and Python Registro de la extensiónRegister the extension
Desarrollo con PortalPortal development Instalación al agregar el enlace de salidaInstall when adding output binding

Para saber cómo actualizar las extensiones de enlace existentes en el portal sin tener que volver a publicar su proyecto de aplicación de función, consulte Actualización de las extensiones.To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

EjemploExample

Vea el ejemplo específico del lenguaje:See the language-specific example:

Ejemplo de C#C# example

En el ejemplo siguiente se muestra una función de C# que usa un desencadenador de cola de Service Bus y un enlace de salida de SendGrid.The following example shows a C# function that uses a Service Bus queue trigger and a SendGrid output binding.

Ejemplo de C# sincrónico: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; }
}

Ejemplo de C# asincrónico: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; }
}

Puede omitir la propiedad ApiKey del atributo si tiene la clave de API en una configuración de aplicación denominada "AzureWebJobsSendGridApiKey".You can omit setting the attribute's ApiKey property if you have your API key in an app setting named "AzureWebJobsSendGridApiKey".

Ejemplo de script de C#C# script example

En el ejemplo siguiente se muestra un enlace de salida de SendGrid en un archivo function.json y una función de script de C# que usa el enlace.The following example shows a SendGrid output binding in a function.json file and a C# script function that uses the binding.

Estos son los datos de enlace del archivo 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}"
        }
    ]
}

En la sección de configuración se explican estas propiedades.The configuration section explains these properties.

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

Ejemplo de JavaJava example

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

Ejemplo de JavaScriptJavaScript example

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.The following example shows a SendGrid output binding in a function.json file and a JavaScript function that uses the binding.

Estos son los datos de enlace del archivo 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"
        }
    ]
}

En la sección de configuración se explican estas propiedades.The configuration section explains these properties.

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

AtributosAttributes

En las bibliotecas de clases de C#, use el atributo SendGrid.In C# class libraries, use the SendGrid attribute.

Para información sobre las propiedades de atributo que puede configurar, consulte Configuración.For information about attribute properties that you can configure, see Configuration. A continuación, se muestra un ejemplo del atributo SendGrid en una signatura de método: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)
{
    ...
}

Para obtener un ejemplo completo, consulte Ejemplo de C#.For a complete example, see C# example.

ConfiguraciónConfiguration

En la siguiente tabla se explican las propiedades de configuración de enlace que se definen en el archivo function.json y el atributo SendGrid.The following table explains the binding configuration properties that you set in the function.json file and the SendGrid attribute.

Propiedad de function.jsonfunction.json property Propiedad de atributoAttribute property DESCRIPCIÓNDescription
typetype Requerida: se debe establecer en sendGrid.Required - must be set to sendGrid.
directiondirection Requerida: se debe establecer en out.Required - must be set to out.
namename Requerida: nombre de variable que se usa en el código de la función para la solicitud o el cuerpo de la solicitud.Required - the variable name used in function code for the request or request body. Este valor es $return cuando hay solo un valor de devuelto.This value is $return when there is only one return value.
apiKeyapiKey ApiKeyApiKey El nombre de una configuración de aplicación que contiene la clave de API.The name of an app setting that contains your API key. Si no está establecido, el nombre predeterminado de la configuración de aplicación es "AzureWebJobsSendGridApiKey".If not set, the default app setting name is "AzureWebJobsSendGridApiKey".
toto ToTo Dirección de correo electrónico del destinatario.the recipient's email address.
fromfrom FromFrom Dirección de correo electrónico del remitente.the sender's email address.
subjectsubject SubjectSubject Asunto del correo electrónico.the subject of the email.
texttext TextText Contenido del correo electrónico.the email content.

Cuando desarrolla localmente, la configuración de aplicación pasa al archivo local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

configuración de host.jsonhost.json settings

En esta sección se describen las opciones de configuración globales disponibles para este enlace en la versión 2.x.This section describes the global configuration settings available for this binding in version 2.x. El siguiente archivo host.json de ejemplo contiene solo la configuración de la versión 2.x para este enlace.The example host.json file below contains only the version 2.x settings for this binding. Para obtener más información acerca de las opciones de configuración globales de la versión 2.x, consulte la referencia de host.json para Azure Functions, versión 2.x.For more information about global configuration settings in version 2.x, see host.json reference for Azure Functions version 2.x.

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.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>"
        }
    }
}
PropiedadProperty Valor predeterminadoDefault DESCRIPCIÓNDescription
Defrom N/Dn/a Dirección de correo electrónico del remitente en todas las funciones.The sender's email address across all functions.

Pasos siguientesNext steps