Envio de E-mails Automáticos com Python (smtplib)

Enviar e-mails automaticamente pode ser uma tarefa extremamente útil em diversos cenários: notificações de sistemas, relatórios diários, lembretes ou até mesmo campanhas personalizadas. Em vez de fazer isso manualmente, podemos usar Python para criar scripts que enviam mensagens de forma simples e eficiente.

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

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:

  • Gmailsmtp.gmail.com, porta 587 (TLS) ou 465 (SSL).

  • Outlook/Hotmailsmtp.office365.com, porta 587.

  • Yahoosmtp.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 .env ou 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

Postagens mais visitadas deste blog

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

Manipulação de Arquivos no C#: Como Ler, Escrever e Trabalhar com Arquivos de Forma Simples

Laços de Repetição em Python: Conceitos e Exemplos Práticos