¿Cómo puedo utilizar Lambda y Amazon SES para enviar correos electrónicos?

6 minutos de lectura
0

Quiero usar AWS Lambda y Amazon Simple Email Service (Amazon SES) para enviar correos electrónicos.

Breve descripción

Para enviar correo electrónico desde una función de Lambda mediante Amazon SES, siga estos pasos:

1.    Cree una política y un rol de ejecución de AWS Identity and Access Management (IAM) para que Lambda ejecute la llamada a la API.

2.    Verifique su identidad de Amazon SES (dominio o dirección de correo electrónico).

3.    Cree o actualice una función de Lambda que incluya la lógica para enviar correo electrónico a través de Amazon SES.

Nota: Para incluir un archivo PDF adjunto en sus correos electrónicos, debe usar la operación de la API SendRawEmail de Amazon SES. Para obtener más información, consulte Sending raw email using the Amazon SES API en GitHub.

Solución

Nota: Los ejemplos de código de las funciones de Lambda Node.js, Python y Ruby en este artículo requieren modificaciones en función del caso de uso. Adapte el ejemplo a su caso de uso o diseñe uno propio en el lenguaje de programación que prefiera.

Creación de un rol de ejecución y una política de IAM para que Lambda ejecute la llamada a la API

1.    Cree una política de IAM mediante el editor de políticas JSON. Al crear la política, pegue el siguiente documento de política JSON en el editor de políticas:

{
 "Version": "2012-10-17",
 "Statement": [
 {
 "Effect": "Allow",
 "Action": [
 "ses:SendEmail",
 "ses:SendRawEmail"
 ],
 "Resource": "*"
 }
 ]
}

Nota: Para obtener más información y ejemplos de cómo restringir el acceso a esta política, consulte Ejemplos de políticas de IAM para SES.

2.    Asocie la política de IAM a un rol de IAM. Para obtener instrucciones, consulte la sección Para utilizar una política administrada como una política de permisos para una entidad (consola) en Adición de permisos de identidad de IAM (consola).

Nota: Este rol de IAM se asignará a su función de Lambda en los siguientes pasos.

Verificación de su identidad de Amazon SES (dominio o dirección de correo electrónico)

Para verificar un dominio, consulte Verificación de una identidad de dominio DKIM con el proveedor de DNS.

Para verificar una dirección de correo electrónico, consulte Verificación de una identidad de dirección de correo electrónico.

Creación o actualización de una función de Lambda que incluya lógica para enviar correo electrónico a través de Amazon SES

1.    Si aún no lo ha hecho, cree una función de Lambda.

Nota: Puede crear una función de Lambda con la consola de Lambda o mediante la creación y la carga de un paquete de despliegue.

2.    En la consola de Lambda, en el panel de navegación izquierdo, seleccione Funciones.

3.    Elija el nombre de la función.

4.    En la pestaña Configuración, en el panel Permisos, preste atención al Rol de ejecución de la función. Compruebe que aparezca el rol de IAM con permisos de Amazon SES que creó anteriormente. Si el rol de IAM no aparece en la lista, asigne el rol correcto a la función.

5.    En Código de la función, en el panel del editor, pegue uno de los siguientes ejemplos de código de función. Asegúrese de usar el ejemplo correspondiente para su entorno de ejecución y versión de Node.js, Python o Ruby.

Importante: Sustituya us-west-2 por la región de AWS en la que se encuentre su identidad verificada de Amazon SES. Sustituya «RecipientEmailAddress», ... por la dirección o las direcciones de correo electrónico a las que desee enviar el correo electrónico. Sustituya SourceEmailAddress por su dirección de correo electrónico de remitente verificada de Amazon SES o por cualquier dirección de correo electrónico de un dominio verificado de Amazon SES. Si lo desea, edite el cuerpo del mensaje («Prueba») y la línea del asunto («Correo electrónico de prueba»).

En el caso de las versiones 18 y posteriores de Node.js, consulte el siguiente código de ejemplo:

// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

import { SESClient, SendEmailCommand } from "@aws-sdk/client-ses";
const ses = new SESClient({ region: "us-west-2" });

export const handler = async(event) => {
  const command = new SendEmailCommand({
    Destination: {
      ToAddresses: ["RecipientEmailAddress", ...],
    },
    Message: {
      Body: {
        Text: { Data: "Test" },
      },

      Subject: { Data: "Test Email" },
    },
    Source: "SourceEmailAddress",
  });

  try {
    let response = await ses.send(command);
    // process data.
    return response;
  }
  catch (error) {
    // error handling.
  }
  finally {
    // finally.
  }
};

Para las versiones 16 y anteriores de Node.js, consulte el siguiente código de ejemplo:

// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

var aws = require("aws-sdk");
var ses = new aws.SES({ region: "us-west-2" });
exports.handler = async function (event) {
  var params = {
    Destination: {
      ToAddresses: ["RecipientEmailAddress", ...],
    },
    Message: {
      Body: {
        Text: { Data: "Test" },
      },

      Subject: { Data: "Test Email" },
    },
    Source: "SourceEmailAddress",
  };

  return ses.sendEmail(params).promise()
};

En el caso de la versión 3.9 de Python, consulte el siguiente código de ejemplo:

import json
import boto3

client = boto3.client('ses', region_name='us-west-2')

def lambda_handler(event, context):

    response = client.send_email(
    Destination={
        'ToAddresses': ['RecipientEmailAddress']
    },
    Message={
        'Body': {
            'Text': {
                'Charset': 'UTF-8',
                'Data': 'This is the message body in text format.',
            }
        },
        'Subject': {
            'Charset': 'UTF-8',
            'Data': 'Test email',
        },
    },
    Source='SourceEmailAddress'
    )

    print(response)

    return {
        'statusCode': 200,
        'body': json.dumps("Email Sent Successfully. MessageId is: " + response['MessageId'])
    }

Para la versión 2.7 de Ruby, consulte el siguiente código de ejemplo:

require "aws-sdk-ses"

$ses = Aws::SES::Client.new(region: "us-west-2")

def lambda_handler(event:, context:)

  resp = $ses.send_email({
  destination: {
    to_addresses: ["RecipientEmailAddress"],
  },
  message: {
    body: {
      text: {
        charset: "UTF-8",
        data: "This is the message body in text format.",
      },
    },
    subject: {
      charset: "UTF-8",
      data: "Test email",
    },
  },
  source: "SourceEmailAddress"
})
    { statusCode: 200, body: JSON.generate("Message Sent Successfully. #{resp.to_h} ") }
end

Para obtener más información sobre el uso de la API sendEmail, consulte la documentación del SDK de AWS para JavaScript, Python, Ruby y Java V2.

6.    Elija Implementar.

(Opcional) Envío de un correo electrónico de prueba

1.    En la consola de Lambda, configure un evento de prueba para su función.

Nota: La carga de prueba es obligatoria, pero no se usa en este ejemplo de código.

2.    Elija Prueba. Lambda usa Amazon SES para enviar el correo electrónico de prueba a su destinatario.

Información relacionada

Sending email using Amazon SES

Identity and Access Management en Amazon SES

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año