Saltar al contenido

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

5 minutos de lectura
0

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

Descripción corta

Para usar Lambda y Amazon SES para enviar correos electrónicos, sigue estos pasos:

  1. Crea una política y un rol de AWS Identity and Access Management (IAM) para que Lambda ejecute la llamada a la API.
  2. Verifica tu identidad de Amazon SES (dominio o dirección de correo electrónico).
  3. Crea o actualiza una función de Lambda que incluya lógica para enviar correos electrónicos a través de Amazon SES.

Nota: Para incluir un archivo PDF adjunto en tus correos electrónicos, debes usar la API SendRawEmail de Amazon SES.

Resolución

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

Sigue estos pasos:

  1. Abre la consola de IAM.

  2. Usa el editor de políticas JSON para crear una política de IAM. Al crear la política, pega 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, consulta Ejemplos de políticas de IAM para SES.

  3. Asocia la política de IAM a un rol de IAM.

Verificación de la identidad de Amazon SES

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

Para verificar una dirección de correo electrónico, consulta 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 correos electrónicos

En los siguientes ejemplos de código de funciones de Lambda de Node.js, Python y Ruby, si es necesario, sustituye estas variables para tu entorno:

  • us-west-2 por la región de AWS en la que se encuentre tu identidad verificada de Amazon SES.
  • «RecipientEmailAddress», ... por la dirección o las direcciones de correo electrónico a las que desees enviar el correo electrónico.
  • SourceEmailAddress por tu 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 deseas, edita el cuerpo del mensaje («Prueba») y la línea del asunto («Correo electrónico de prueba»).

Nota: También puedes diseñar tu propio código de función de Lambda en las versiones ejecutables compatibles que prefieras.

Sigue estos pasos:

  1. Abre la consola de Lambda y, a continuación, selecciona Funciones.

  2. Si aún no lo has hecho, crea una función de Lambda.
    Nota: Puedes usar la consola Lambda o crear y cargar un paquete de despliegue.

  3. Elige el nombre de la función y, a continuación, elige la pestaña Configuración.

  4. En el panel Permisos, revisa el rol de ejecución de la función.

  5. Comprueba que aparezca el rol de IAM con permisos de Amazon SES que creaste anteriormente. Si el rol de IAM no aparece en la lista, asigna el rol correcto a la función.

  6. Selecciona la pestaña Código. En el editor de código integrado, pega uno de los siguientes ejemplos de código de función. 
    Ejemplo de código de la versión 18 y posteriores de Node.js:

    // 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.
      }
    };

    Ejemplo de código de la versión 16 y anteriores de Node.js:

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

    Ejemplo de código de la versión 3.9 de Python: 

    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'])
        }

    Ejemplo de código de la versión 2.7 de Ruby:

    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
  7. Selecciona Desplegar.

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

Sigue estos pasos:

  1. Abre la consola de Lambda y, a continuación, selecciona tu función.
  2. Configura un evento de prueba para tu función.
    Nota: La carga útil de prueba es obligatoria, pero no se usa en este ejemplo de código.
  3. Elige Pruebas. Lambda usa Amazon SES para enviar el correo electrónico de prueba a tu destinatario.

Información relacionada

Sending email using Amazon SES

Identity and Access Management en Amazon SES

OFICIAL DE AWSActualizada hace 8 meses