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 chamada servidor.starttls() garante a criptografia dos dados transmitidos na porta 587, 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

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server