Como Enviar E-mails Automatizados com Anexo em Python Usando smtplib
Como Enviar E-mails Automatizados com Anexo em Python Usando smtplib
O envio automatizado de e-mails é essencial para relatórios periódicos, alertas de sistema e notificações de fluxos de trabalho. Utilizando os módulos nativos do Python
smtplib e email, você pode estruturar mensagens no formato MIME e conectar-se com segurança a servidores SMTP sem precisar instalar dependências externas.Python
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
def enviar_email_com_anexo():
# Configurações do servidor SMTP (Exemplo: Gmail / Outlook)
smtp_server = "smtp.gmail.com"
smtp_port = 587
remetente = "seu_email@gmail.com"
senha = "sua_senha_de_app" # Utilize uma Senha de App configurada na conta
destinatario = "destinatario@exemplo.com"
# Criando a estrutura do e-mail
mensagem = MIMEMultipart()
mensagem["From"] = remetente
mensagem["To"] = destinatario
mensagem["Subject"] = "Relatório Diário Automatizado"
# Corpo do e-mail
corpo = "Olá! Segue em anexo o relatório atualizado gerado automaticamente."
mensagem.attach(MIMEText(corpo, "plain", "utf-8"))
# Anexando um arquivo
caminho_arquivo = "relatorio.pdf"
with open(caminho_arquivo, "rb") as anexo:
part = MIMEBase("application", "octet-stream")
part.set_payload(anexo.read())
# Codificando o arquivo em Base64
encoders.encode_base64(part)
part.add_header("Content-Disposition", f"attachment; filename={caminho_arquivo}")
mensagem.attach(part)
# Conexão segura e envio
try:
servidor = smtplib.SMTP(smtp_server, smtp_port)
servidor.starttls() # Habilita criptografia TLS
servidor.login(remetente, senha)
servidor.sendmail(remetente, destinatario, mensagem.as_string())
servidor.quit()
print("E-mail enviado com sucesso!")
except Exception as e:
print(f"Falha ao enviar e-mail: {e}")
# Exemplo prático de execução
if __name__ == "__main__":
enviar_email_com_anexo()
Pontos-chave
- Autenticação e Senhas de Aplicativo: Provedores como Gmail e Outlook bloqueiam o uso da senha convencional em scripts; é necessário gerar uma "Senha de App" (App Password) nas configurações de segurança do e-mail.
- Segurança com
STARTTLS: A chamadaservidor.starttls()garante a criptografia dos dados transmitidos na porta587, impedindo a interceptação de credenciais em texto puro. - Codificação em Base64: O método
encoders.encode_base64(part)é obrigatório para converter arquivos binários (PDFs, imagens, ZIPs) em strings de texto compatíveis com o protocolo MIME. - Gerenciamento de Arquivos: Utilizar o bloco
with open(..., "rb")assegura a leitura em modo binário e o fechamento automático do arquivo após a anexação, evitando vazamento de recursos.

Comentários
Postar um comentário