Enviando E-mails com Python, Amazon SES e LocalStack: Um Guia Completo

Anderson L Pereira
5 min readSep 15, 2024

--

Enviar e-mails automaticamente é uma tarefa comum em muitas aplicações modernas. Neste artigo, vamos mostrar como usar o Amazon SES (Simple Email Service) para enviar e-mails diretamente de um script Python, além de utilizar o LocalStack para simular o SES localmente. Isso permitirá que você desenvolva e teste seu código sem custos associados ao uso real dos serviços da AWS.

O que você vai aprender?

  • Como configurar o LocalStack para simular serviços da AWS.
  • Como usar o Amazon SES em Python com a biblioteca boto3.
  • Como enviar e-mails de forma eficiente e segura.

Pré-requisitos

Antes de começar, você precisará de algumas ferramentas instaladas no seu ambiente de desenvolvimento:

  1. Python 3.x: Certifique-se de ter o Python 3 instalado no seu sistema.
  2. boto3: Biblioteca oficial da AWS para Python.
  3. LocalStack: Ferramenta que simula localmente vários serviços da AWS, incluindo o SES.
  4. Docker: Necessário para executar o LocalStack.

Instalando Dependências

Para instalar as bibliotecas necessárias, você pode usar o pip:

pip install boto3 localstack

Com essas dependências instaladas, você já estará pronto para configurar o ambiente.

O que é Amazon SES?

Amazon SES (Simple Email Service) é um serviço de e-mail escalável, flexível e de baixo custo fornecido pela AWS. Ele permite que você envie e-mails transacionais, notificações e promoções de forma segura e confiável.

Normalmente, ao usar o SES, você precisa configurar suas credenciais da AWS e seguir um processo de verificação de domínio. No entanto, para fins de desenvolvimento e testes, utilizaremos o LocalStack para simular o SES localmente, sem a necessidade de uma conta AWS.

O que é o LocalStack?

O LocalStack é uma ferramenta que permite simular serviços da AWS localmente, como S3, SNS, Lambda, e SES. Isso é útil porque você pode desenvolver e testar funcionalidades que dependem de serviços da AWS sem incorrer em custos ou restrições de uso. Ele roda em containers Docker e fornece um endpoint local para interagir com esses serviços.

Agora, vamos configurar o LocalStack e integrá-lo ao SES com o Python.

Configurando o LocalStack

Para rodar o LocalStack, você precisa do Docker. Se já o tiver instalado, basta rodar o seguinte comando para iniciar o LocalStack:

localstack start

Isso iniciará um ambiente simulado, com serviços da AWS disponíveis localmente no endereço http://localhost:4566.

Criando um Script Python para Enviar E-mails com SES

Agora que temos o LocalStack rodando, vamos ao código Python que utiliza o boto3 para interagir com o SES.

Estrutura do Código

O script abaixo faz o seguinte:

  1. Configura o cliente SES para se conectar ao LocalStack.
  2. Define os parâmetros de envio de e-mail (remetente, destinatário, assunto, corpo em texto e HTML).
  3. Envia o e-mail utilizando o SES simulado pelo LocalStack.

Código Python

import boto3
from botocore.exceptions import ClientError

# Configurações do SES no LocalStack
localstack_endpoint_url = "http://localhost:4566"
AWS_REGION = "us-east-1"
SENDER = "sender@example.com"
RECIPIENT = "recipient@example.com"
SUBJECT = "Assunto do E-mail LocalStack SES"
BODY_TEXT = "Olá, este é um e-mail enviado localmente com SES e LocalStack!"
BODY_HTML = """<html>
<head></head>
<body>
<h1>Olá!</h1>
<p>Este é um e-mail enviado localmente com <b>SES e LocalStack</b>.</p>
</body>
</html>"""

# Definindo o formato da mensagem
CHARSET = "UTF-8"

# Criando o cliente SES utilizando o LocalStack
ses_client = boto3.client(
'ses',
region_name=AWS_REGION,
endpoint_url=localstack_endpoint_url,
aws_access_key_id="fake_access_key", # Chave fake para LocalStack
aws_secret_access_key="fake_secret_key", # Chave secreta fake para LocalStack
)

# Função para enviar o e-mail
def enviar_email():
try:
# Envio do e-mail usando SES
response = ses_client.send_email(
Destination={
'ToAddresses': [
RECIPIENT,
],
},
Message={
'Body': {
'Html': {
'Charset': CHARSET,
'Data': BODY_HTML,
},
'Text': {
'Charset': CHARSET,
'Data': BODY_TEXT,
},
},
'Subject': {
'Charset': CHARSET,
'Data': SUBJECT,
},
},
Source=SENDER,
)
print(f"E-mail enviado com sucesso! ID da mensagem: {response['MessageId']}")
except ClientError as e:
print(f"Erro ao enviar e-mail: {e.response['Error']['Message']}")

# Chamando a função para enviar o e-mail
enviar_email()

Explicação do Código

  • localstack_endpoint_url: Define o endpoint local onde o LocalStack está rodando.
  • AWS_REGION: Região fictícia usada pelo LocalStack.
  • SENDER e RECIPIENT: Definem o endereço de e-mail do remetente e do destinatário.
  • BODY_TEXT e BODY_HTML: O corpo do e-mail, tanto em formato de texto simples quanto em HTML.
  • ses_client: O cliente SES do boto3 que está configurado para se conectar ao LocalStack.
  • enviar_email: Função que envia o e-mail e lida com exceções usando o ClientError.

Executando o Script

Para enviar o e-mail simulado pelo LocalStack, basta rodar o script:

python enviar_email.py

Se tudo estiver configurado corretamente, você verá a seguinte saída no terminal:

E-mail enviado com sucesso! ID da mensagem: xxxxxxx

Se ocorrer algum erro, ele será capturado e exibido.

Verificando os Logs do LocalStack

Para garantir que o e-mail foi enviado com sucesso, você pode verificar os logs do container do LocalStack:

docker logs localstack_main

Isso mostrará todos os eventos simulados, incluindo a operação SES, sem que você tenha de acessar a AWS diretamente.

Ou entre aqui: https://app.localstack.cloud/
Aqui tem uma explicação: https://programadriano.medium.com/aws-ses-node-js-localstack-367c2bed60d2

Conclusão

Neste artigo, você aprendeu como enviar e-mails com Python usando o Amazon SES, além de simular esse processo localmente com o LocalStack. Essa abordagem é excelente para ambientes de desenvolvimento, pois permite testar funcionalidades de e-mail sem custos adicionais ou a necessidade de configurar uma conta na AWS.

O LocalStack é uma ferramenta poderosa para qualquer desenvolvedor que deseja testar interações com a AWS de forma rápida e econômica. Uma vez que seu código esteja funcionando localmente, migrar para a AWS real será um processo simples de ajuste de credenciais.

Próximos Passos

  • Experimente enviar e-mails transacionais ou com anexos.
  • Integre o envio de e-mails a fluxos de trabalho automatizados ou notificações em sua aplicação.
  • Substitua o LocalStack pela versão real da AWS para produção e verifique o processo de verificação de domínio e remetentes no Amazon SES.

Se este artigo foi útil, compartilhe com sua rede e siga-me para mais tutoriais práticos como este!

Com este artigo, você estará pronto para implementar soluções de envio de e-mails automatizados utilizando SES e LocalStack no seu próximo projeto.

Link projeto: https://github.com/andersonluizpereira/python_serie_web/tree/main/serie_python_web/curiosidades/email_ses

--

--

No responses yet