Enviando E-mail em Python com SMTP: Guia Rápido
O protocolo SMTP (Simple Mail Transfer Protocol) gerencia o envio e roteamento de e-mails entre servidores. Python fornece o módulo smtplib para criar sessões de cliente SMTP.
Criando Objeto SMTP
import smtplib
smtp_obj = smtplib.SMTP([host[, porta[, hostname_local]]])
- host: servidor SMTP (IP ou domínio). Opcional.
- porta: porta do servidor (padrão 25). Obrigatório se host informado.
- hostname_local: use
'localhost'se o servidor rodar localmente.
Método sendmail
Envia a mensagem. Parâmetros:
- remetente – string com endereço do remetente.
- destinatários – lista de strings, um por destinatário.
- mensagem – string formatada conforme RFCs (cabeçalhos
From,To,Subjectseparados do corpo por linha em branco).
Exemplo Básico (Texto Simples)
#!/usr/bin/python
import smtplib
remetente = 'de@dominio.com'
destinatarios = ['para@dominio.com']
mensagem = """From: Remetente
To: Destinatário
Subject: Teste SMTP
Esta é uma mensagem de teste.
"""
try:
smtp_obj = smtplib.SMTP('localhost')
smtp_obj.sendmail(remetente, destinatarios, mensagem)
print("E-mail enviado com sucesso")
except smtplib.SMTPException:
print("Erro: não foi possível enviar o e-mail")
Se não houver servidor SMTP local, use um remoto:
smtplib.SMTP('mail.seu-dominio.com', 25)
Enviando E-mail em HTML
Defina cabeçalhos MIME-Version e Content-type: text/html:
mensagem = """From: Remetente
To: Destinatário
MIME-Version: 1.0
Content-type: text/html
Subject: Teste HTML
<b>Isto é HTML</b>
<h1>Título</h1>
"""
Enviando Anexos
Use Content-Type: multipart/mixed com boundaries. Arquivos devem ser codificados em base64 (base64.b64encode).
#!/usr/bin/python
import smtplib, base64
arquivo = "/tmp/teste.txt"
with open(arquivo, "rb") as f:
conteudo = f.read()
codificado = base64.b64encode(conteudo).decode()
remetente = 'webmaster@exemplo.com'
destinatario = 'usuario@gmail.com'
marcador = "MARCADOR_UNICO"
parte1 = f"""From: Remetente
To: Destinatário <{destinatario}>
Subject: Enviando Anexo
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary={marcador}
--{marcador}
"""
parte2 = f"""Content-Type: text/plain
Content-Transfer-Encoding: 8bit
Corpo da mensagem.
--{marcador}
"""
parte3 = f"""Content-Type: application/octet-stream; name="{arquivo}"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="{arquivo}"
{codificado}
--{marcador}--
"""
mensagem = parte1 + parte2 + parte3
try:
smtp_obj = smtplib.SMTP('localhost')
smtp_obj.sendmail(remetente, destinatario, mensagem)
print("E-mail com anexo enviado")
except Exception as e:
print("Erro:", e)
Dica: Para produção, prefira a biblioteca email (ex.: email.mime.multipart.MIMEMultipart) que monta mensagens MIME corretamente.
python
- Dominando Tipos de Dados em Python: Guia Prático
- Dominando Operadores em Python: Guia Completo
- Dominando a Declaração Pass em Python: Guia Prático
- Dominando Argumentos de Funções em Python: Parâmetros Posicionais, Nomeados e Padrão
- Dominando Dicionários em Python: Criação, Manipulação e Técnicas Avançadas
- Dominando Tratamento de Exceções em Python: try, except, else e finally Explicados
- Sensor de Temperatura Infravermelho TMP006 com Raspberry Pi: Biblioteca Python e Guia de Configuração
- Construa um Sensor de Temperatura Remoto com Raspberry Pi e Python – Guia Passo a Passo
- Calculando Médias em Python: Guia Prático
- Troque Duas Variáveis Python Sem Variável Temporária – Sem Esforço