Ir para o conteúdo

Como utilizo o Lambda e o Amazon SES para enviar e-mails?

5 minuto de leitura
0

Quero utilizar o AWS Lambda e o Amazon Simple Email Service (Amazon SES) para enviar e-mails.

Breve descrição

A fim de utilizar o Lambda e o Amazon SES para enviar e-mails, conclua estas etapas:

  1. Crie uma política e um perfil de execução do AWS Identity and Access Management (AWS IAM) para que o Lambda execute a chamada de API.
  2. Verifique sua identidade do Amazon SES (domínio ou endereço de e-mail).
  3. Crie ou atualize uma função do Lambda que inclua lógica para enviar e-mails por meio do Amazon SES.

Observação: para incluir um anexo em PDF em seus e-mails, deve-se utilizar a operação da API SendRawEmail do Amazon SES.

Resolução

Crie uma política do IAM e a anexe a um perfil para que o Lambda execute a chamada de API

Conclua as seguintes etapas:

  1. Abra o console do IAM.

  2. Utilize o editor de políticas JSON para criar uma política do IAM. Ao criar a política, cole o seguinte documento de política JSON no editor de políticas:

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

    Observação: para obter mais informações e exemplos de como restringir o acesso a essa política, consulte Exemplos de políticas do IAM para o Amazon SES.

  3. Anexe a política do IAM a um perfil do IAM.

Verifique sua identidade do Amazon SES

Para verificar um domínio, consulte Verificar uma identidade de domínio DKIM com o provedor de DNS.

Para verificar um endereço de e-mail, consulte Verificar a identidade de um endereço de e-mail.

Crie ou atualize uma função do Lambda que inclua lógica para enviar e-mails

Nos seguintes exemplos de código de função do Lambda, tais como o Node.js, Python e Ruby; onde necessário, substitua essas variáveis em seu ambiente:

  • us-west-2 pela região da AWS em que sua identidade verificada do Amazon SES está.
  • “RecipientEmailAddress”,... pelo endereço ou endereços de e-mail para os quais você deseja enviar o e-mail.
  • SourceEmailAddress pelo seu endereço de e-mail de remetente verificado pelo Amazon SES ou por qualquer endereço de e-mail de um domínio verificado do Amazon SES. Opcionalmente, edite o corpo da mensagem (“Test”) e a linha de assunto (“Test Email”).

Observação: também é possível criar seu próprio código de função do Lambda, a partir dos runtimes compatíveis de sua preferência.

Conclua as seguintes etapas:

  1. Abra o console do Lambda e escolha Funções.

  2. Caso ainda não tenha feito, crie uma função do Lambda.
    Observação: é possível utilizar o console do Lambda ou criar e carregar um pacote de implantação.

  3. Escolha o nome da sua função e em seguida, selecione a guia Configuração.

  4. No painel de Permissões, revise a função de Perfil de execução.

  5. Verifique se o perfil do IAM com as permissões do Amazon SES criado anteriormente está listado. Caso o perfil do IAM correto não estiver listado, atribua o perfil correto à função.

  6. Selecione a guia Código. No editor de código incorporado, cole um dos seguintes exemplos de código de função. 
    Exemplo de código do Node.js versões 18 e seguintes:

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

    Exemplo de código do Node.js versões 16 e anteriores:

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

    Exemplo de código Python versão 3.9:

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

    Exemplo de código Ruby versão 2.7:

    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. Selecione Implantar.

(Opcional) Enviar um e-mail de teste

Conclua as seguintes etapas:

  1. Abra o console do Lambda e selecione a função.
  2. Configure um evento de teste para a função.
    Observação: a carga útil de teste é obrigatória, mas não será utilizada neste exemplo de código.
  3. Selecione Testar. O Lambda utiliza o Amazon SES para enviar o e-mail de teste ao destinatário.

Informações relacionadas

Como enviar e-mail usando o Amazon SES

Gerenciamento de identidade e acesso no Amazon SES

AWS OFICIALAtualizada há 10 meses