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

6 minuto de leitura
0

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

Breve descrição

Para enviar e-mails de uma função do Lambda usando o Amazon SES, siga estas etapas:

1.    Crie uma política e um perfil de execução do AWS Identity and Access Management (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 pelo Amazon SES.

Observação: para incluir um anexo em PDF em seus e-mails, você deve usar a operação da API Amazon SES SendRawEmail. Para obter mais informações, consulte Enviar e-mail bruto usando a API do Amazon SES no GitHub.

Resolução

Observação: os exemplos de código de função do Lambda Node.js, Python e Ruby neste artigo requerem modificações, dependendo do seu caso de uso. Adapte o exemplo ao seu caso de uso ou crie o seu próprio em sua linguagem de programação preferida.

Crie uma política do IAM e um perfil de execução para o Lambda executar a chamada de API

1.    Crie uma política do IAM usando o editor de políticas JSON. 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.

2.    Anexe a política do IAM a um perfil do IAM. Para obter instruções, consulte a seção Para usar uma política gerenciada como política de permissões para uma identidade (console) em Adicionar permissões de identidade do IAM (console).

Observação: você atribuirá esse perfil do IAM à sua função do Lambda nas etapas a seguir.

Verificar sua identidade do Amazon SES (domínio ou endereço de e-mail)

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

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

Criar ou atualizar uma função Lambda que inclua lógica para enviar e-mails por meio do Amazon SES

1.    Se você ainda não fez isso, crie uma função do Lambda.

Observação: você pode criar uma função do Lambda usando o console do Lambda ou criando e carregando um pacote de implantação.

2.    No console do Lambda, no painel de navegação esquerdo, escolha Funções.

3.    Escolha o nome da sua função.

4.    Na guia Configuração, no painel Permissões, veja o Perfil de execução da função. Verifique se o perfil do IAM com as permissões do Amazon SES que você criou anteriormente está listado. Se o perfil do IAM correto não estiver listado, atribua o perfil correto à função.

5.    Em Código de função, no painel do editor, cole um dos seguintes exemplos de código de função. Certifique-se de usar o exemplo relevante para seu runtime e versão do Node.js, Python ou Ruby.

Importante: substitua us-west-2 pela região da AWS em que sua identidade verificada do Amazon SES está. Substitua “Endereço de e-mail do destinatário”,... pelo endereço ou endereços de e-mail para os quais você deseja enviar o e-mail. Substitua 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 pelo Amazon SES. Opcionalmente, edite o corpo da mensagem (“Teste”) e a linha de assunto (“E-mail de teste”).

Para as versões 18 e mais recentes do Node.js, consulte o código de exemplo a seguir:

// 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 as versões 16 e anteriores do Node.js, consulte o código de exemplo a seguir:

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

Para a versão 3.9 do Python, consulte o código de exemplo a seguir:

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 a versão 2.7 do Ruby, veja o código de exemplo a seguir:

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 obter mais informações sobre o uso da API sendEmail, consulte a documentação do AWS SDK para JavaScript, Python, Ruby e Java V2.

6.    Escolha Implantar.

(Opcional) Enviar um e-mail de teste

1.    No console do Lambda, configure um evento de teste para sua função.

Observação: a carga útil de teste é obrigatória, mas não é usada neste exemplo de código.

2.    Escolha Testar. O Lambda usa 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 OFICIAL
AWS OFICIALAtualizada há um ano