Envio de E-mails Automáticos com Python (smtplib)
Neste artigo, você vai aprender:
Como funciona o envio de e-mails com SMTP.
Como usar a biblioteca smtplib do Python.
Como configurar remetente, destinatário, assunto e corpo da mensagem.
Como enviar anexos (PDF, imagens, etc.).
Como aplicar boas práticas de segurança (senhas, conexões seguras).
🔹 1. Entendendo o SMTP
O SMTP (Simple Mail Transfer Protocol) é o protocolo padrão para envio de e-mails.
Cada provedor (Gmail, Outlook, Yahoo, etc.) possui um servidor SMTP que aceita conexões e entrega mensagens.
Exemplos de servidores SMTP comuns:
Gmail:
smtp.gmail.com, porta 587 (TLS) ou 465 (SSL).Outlook/Hotmail:
smtp.office365.com, porta 587.Yahoo:
smtp.mail.yahoo.com, porta 465.
🔹 2. Preparando o ambiente
O Python já vem com o smtplib, então não é necessário instalar pacotes adicionais.
Mas para criar e-mails formatados, também usaremos a biblioteca email (padrão no Python).
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
🔹 3. Enviando um e-mail simples (texto puro)
O exemplo mais básico é enviar um e-mail apenas com texto:
import smtplib
from email.mime.text import MIMEText
# Configurações do servidor SMTP
smtp_server = "smtp.gmail.com"
port = 587
remetente = "seu_email@gmail.com"
senha = "sua_senha_app" # senha de app, não a senha normal da conta
destinatario = "destinatario@gmail.com"
# Criando o corpo do e-mail
mensagem = MIMEText("Olá! Este é um e-mail enviado automaticamente com Python.", "plain")
mensagem["Subject"] = "Teste de envio automático"
mensagem["From"] = remetente
mensagem["To"] = destinatario
# Conectando ao servidor e enviando
with smtplib.SMTP(smtp_server, port) as servidor:
servidor.starttls() # ativa segurança TLS
servidor.login(remetente, senha)
servidor.sendmail(remetente, destinatario, mensagem.as_string())
print("✅ E-mail enviado com sucesso!")
🔹 4. E-mail com corpo em HTML
Podemos deixar a mensagem mais bonita usando HTML:
html = """
<html>
<body>
<h2 style="color:blue;">Relatório Automático</h2>
<p>Olá, este é um <b>e-mail em HTML</b> enviado com Python!</p>
</body>
</html>
"""
mensagem = MIMEText(html, "html")
mensagem["Subject"] = "Relatório em HTML"
mensagem["From"] = remetente
mensagem["To"] = destinatario
Isso permite criar layouts personalizados, inserir imagens externas e até botões.
🔹 5. E-mail com anexos
Enviar relatórios, PDFs ou imagens é muito comum em automações. Para isso, usamos MIMEMultipart:
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import os
# Criando a estrutura da mensagem
mensagem = MIMEMultipart()
mensagem["From"] = remetente
mensagem["To"] = destinatario
mensagem["Subject"] = "Relatório com Anexo"
# Corpo do e-mail
mensagem.attach(MIMEText("Segue em anexo o relatório solicitado.", "plain"))
# Adicionando arquivo PDF
caminho_arquivo = "relatorio.pdf"
with open(caminho_arquivo, "rb") as arquivo:
parte = MIMEBase("application", "octet-stream")
parte.set_payload(arquivo.read())
encoders.encode_base64(parte)
parte.add_header("Content-Disposition", f"attachment; filename={os.path.basename(caminho_arquivo)}")
mensagem.attach(parte)
# Enviando
with smtplib.SMTP(smtp_server, port) as servidor:
servidor.starttls()
servidor.login(remetente, senha)
servidor.sendmail(remetente, destinatario, mensagem.as_string())
print("📎 E-mail com anexo enviado!")
🔹 6. Segurança e boas práticas
⚠️ Nunca use sua senha real do e-mail diretamente no código.
No Gmail, ative a verificação em duas etapas e crie uma senha de app.
No Outlook, faça o mesmo (senhas de aplicativo).
Guarde a senha em um arquivo
.envou use variáveis de ambiente:
import os
senha = os.getenv("EMAIL_SENHA")
🔹 7. Automatizando envios em lote
Com Python, você pode enviar o mesmo e-mail para várias pessoas facilmente:
destinatarios = ["pessoa1@gmail.com", "pessoa2@gmail.com", "pessoa3@gmail.com"]
for destinatario in destinatarios:
mensagem["To"] = destinatario
servidor.sendmail(remetente, destinatario, mensagem.as_string())
✅ Útil para relatórios diários, avisos de sistema, lembretes automáticos.
🔹 8. Projeto prático: Envio automático de relatórios
Imagine que todo dia às 9h você precisa enviar um relatório em PDF.
Podemos integrar o script com o schedule ou cron (Linux) para rodar automaticamente.
Exemplo com schedule:
import schedule
import time
def enviar_relatorio():
print("📧 Enviando relatório diário...")
# aqui entra o código de envio de e-mail com anexo
# Agenda para rodar às 9h todos os dias
schedule.every().day.at("09:00").do(enviar_relatorio)
while True:
schedule.run_pending()
time.sleep(60)
🔹 9. Conclusão
Com o smtplib e a biblioteca email, conseguimos:
✅ Enviar e-mails de texto simples.
✅ Criar mensagens em HTML personalizadas.
✅ Anexar arquivos automaticamente.
✅ Automatizar relatórios e notificações do sistema.
Isso mostra como o Python é poderoso para automação de tarefas do dia a dia.

Comentários
Postar um comentário