✅ Artigo atualizado em Setembro 2026 Corrigimos o endereço do servidor SMTP do Gmail, explicamos a senha de app exigida pelo Google, passamos a montar a mensagem com
EmailMessage(com assunto e cabeçalhos) e trocamos otry/finallypor um blocowith, que fecha a conexão com segurança.
Salve salve Pythonista!
Enviar emails é uma tarefa muito útil em várias aplicações, como envio de notificações, newsletters e mensagens automatizadas.
Felizmente, o Python oferece uma biblioteca chamada smtplib que facilita muito o envio de emails por meio do protocolo SMTP (Simple Mail Transfer Protocol).
Neste artigo, vamos explorar como enviar email no Python.
Vamos nessa!
Vá Direto ao Assunto…
- Configurando o ambiente
- Importando a biblioteca smtplib
- Estabelecendo uma conexão com o servidor de email
- Habilitando a comunicação com o servidor de email
- Autenticando-se no servidor de email
- Enviando um email
- Encerrando a conexão com o servidor de email
- Lidando com exceções
Configurando o ambiente
Antes de começar a enviar emails no Python, é necessário configurar o ambiente.
Você precisa ter uma conta de email válida com as informações do seu servidor de SMTP.
Geralmente, essas informações incluem:
- O endereço do servidor SMTP;
- A porta de envio;
- Suas credenciais (usuário e senha).
Por exemplo, para utilizar o Gmail do Google para enviar emails, os dados serão:
- Endereço do Servidor SMTP:
smtp.gmail.com - Porta:
587(com TLS viastarttls()) ou465(conexão SSL direta) - Seu email do Google e uma senha de app
Senha de app do Gmail
O Gmail não aceita a senha normal da sua Conta do Google em programas como este. Você precisa gerar uma senha de app: um código de 16 caracteres que autoriza só aquele aplicativo a acessar a conta.
Segundo a ajuda oficial do Google:
- É preciso ter a verificação em duas etapas ativada na conta;
- A senha é criada na página de senhas de app da sua Conta do Google;
- A opção pode não estar disponível em contas de trabalho ou escola, em contas com o Programa de Proteção Avançada ou quando a verificação em duas etapas usa apenas chaves de segurança.
Guarde essa senha fora do código (por exemplo, em uma variável de ambiente) e nunca a publique em repositórios.
Importando a biblioteca smtplib
O primeiro passo é importar a biblioteca smtplib para utilizar suas funcionalidades.
Junto com ela, vamos importar o módulo ssl (para a conexão segura) e a classe EmailMessage, do pacote email, que monta a mensagem no formato correto:
1
2
3
import smtplib
import ssl
from email.message import EmailMessage
Importante ressaltar que smtplib, ssl e email fazem parte do próprio Python, não necessitando portanto a instalação com o pip.
Estabelecendo uma conexão com o servidor de email
Após importar a biblioteca smtplib, é necessário estabelecer uma conexão com o servidor de email.
Para isso, utilize a função smtplib.SMTP() e forneça o endereço do servidor SMTP e a porta de envio como argumentos.
Por exemplo:
1
servidor_email = smtplib.SMTP('smtp.gmail.com', 587)
No exemplo acima, estamos utilizando o servidor SMTP do Gmail e a porta de envio é a 587.
É importante verificar as informações corretas para o servidor de email que você está utilizando.
Habilitando a comunicação com o servidor de email
Após estabelecer a conexão com o servidor de email, é necessário habilitar a comunicação usando o método starttls().
Esse método inicia o modo de transporte de camada de segurança (TLS).
Passe um contexto criado com ssl.create_default_context(): sem ele, o smtplib criptografa a conexão, mas não verifica o certificado do servidor.
Veja o exemplo:
1
2
contexto = ssl.create_default_context()
servidor_email.starttls(context=contexto)
A resposta do servidor do Gmail será:
1
(220, b'2.0.0 Ready to start TLS')
Estou construindo o Ebookr.ai, uma plataforma onde você cria ebooks profissionais com IA sobre qualquer assunto - do zero ao PDF pronto, com capas e infográficos gerados automaticamente. Dá uma olhada!
Autenticando-se no servidor de email
Após habilitar a comunicação, é necessário autenticar-se no servidor de email utilizando suas credenciais de login.
Para isso, utilize o método login() fornecendo seu usuário e senha como argumentos. No Gmail, a senha é a senha de app que você gerou, não a senha normal da conta.
Por exemplo:
1
servidor_email.login('[email protected]', 'sua_senha_de_app')
Automatizar o envio de e-mail é um baita primeiro projeto, mas a régua sobe rápido: SMTP seguro, tratamento de exceção, variáveis de ambiente. Para dar esse próximo passo com uma trilha completa, conheça a Jornada Python:
Enviando um email
Agora que você estabeleceu uma conexão com o servidor e autenticou-se com sucesso, é possível enviar um email.
Um email não é só o texto: ele precisa de cabeçalhos como assunto (Subject), remetente (From) e destinatários (To). A classe EmailMessage monta tudo isso no formato MIME correto (inclusive com acentos), e o método send_message() envia a mensagem:
1
2
3
4
5
6
7
8
9
10
remetente = '[email protected]'
destinatarios = ['[email protected]', '[email protected]']
mensagem = EmailMessage()
mensagem['Subject'] = 'Email de teste enviado com Python'
mensagem['From'] = remetente
mensagem['To'] = ', '.join(destinatarios)
mensagem.set_content('Olá, este é um email de teste.')
servidor_email.send_message(mensagem)
No exemplo acima, estamos enviando um email a partir do endereço “[email protected]” para os destinatários da lista destinatarios, com o assunto “Email de teste enviado com Python”.
O send_message() lê o remetente e os destinatários direto dos cabeçalhos From e To (e também de Cc e Bcc, se existirem).
Você também vai encontrar exemplos com o método sendmail(remetente, destinatarios, conteudo). Ele funciona, mas envia o conteúdo exatamente como recebe: se você passar só uma string de texto, o email chega sem assunto e sem cabeçalhos. E, como ele codifica strings em ASCII, um texto com acentos (como “Olá, este é…”) faz a chamada falhar com UnicodeEncodeError. Por isso, prefira EmailMessage com send_message().
Encerrando a conexão com o servidor de email
Após enviar o email com sucesso, é importante encerrar a conexão com o servidor de email para liberar os recursos.
Utilize o método quit() para fazer isso:
1
servidor_email.quit()
Na prática, o jeito mais seguro é abrir a conexão com um bloco with: o smtplib.SMTP envia o QUIT automaticamente ao sair do bloco, mesmo se acontecer um erro no meio do caminho. É o que faremos no exemplo completo a seguir.
Está curtindo esse conteúdo? ![]()
Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?
Lidando com exceções
Durante o processo de envio de emails, podem ocorrer erros.
Por isso, é importante lidar com exceções para tratar possíveis problemas.
Você pode utilizar um bloco try-except para capturar exceções e realizar ações específicas em caso de erro (veja mais em tratamento de erros e exceções no Python).
Veja o exemplo completo, juntando tudo o que vimos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import smtplib
import ssl
from email.message import EmailMessage
remetente = '[email protected]'
destinatarios = ['[email protected]', '[email protected]']
mensagem = EmailMessage()
mensagem['Subject'] = 'Email de teste enviado com Python'
mensagem['From'] = remetente
mensagem['To'] = ', '.join(destinatarios)
mensagem.set_content('Olá, este é um email de teste.')
contexto = ssl.create_default_context()
try:
with smtplib.SMTP('smtp.gmail.com', 587) as servidor_email:
servidor_email.starttls(context=contexto)
servidor_email.login(remetente, 'sua_senha_de_app')
servidor_email.send_message(mensagem)
print('Email enviado com sucesso!')
except smtplib.SMTPAuthenticationError:
print('Falha na autenticação: confira o email e a senha de app.')
except smtplib.SMTPException as e:
print(f"Erro do servidor SMTP: {e}")
except OSError as e:
print(f"Erro de conexão: {e}")
No exemplo acima, o bloco with garante que a conexão seja encerrada (com QUIT) ao final, tenha dado certo ou não.
Já o try-except trata os erros mais comuns em ordem, do mais específico para o mais genérico: falha de login (SMTPAuthenticationError), outros erros do protocolo SMTP (SMTPException) e problemas de rede, como servidor fora do ar ou sem conexão (OSError).
Evite o padrão antigo de criar a conexão dentro do try e chamar quit() no finally: se o próprio smtplib.SMTP() falhar, a variável da conexão nunca chega a existir, e o quit() do finally lança um NameError que esconde o erro original.
Se preferir a porta 465, troque o bloco por with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=contexto) as servidor_email: e remova a chamada ao starttls(), porque nesse caso a conexão já nasce criptografada.
Conclusão
Neste artigo, exploramos como enviar emails usando a biblioteca smtplib do Python.
Aprendemos a estabelecer uma conexão segura com o servidor de email, autenticar-se com uma senha de app, montar a mensagem com EmailMessage, enviá-la e lidar com exceções.
Agora você tem os conhecimentos necessários para automatizar o envio de emails utilizando o Python. Para combinar com outras automações, veja também como automatizar planilhas Excel com Python.
Experimente essa funcionalidade em suas próximas aplicações e aproveite todos os benefícios que o envio de emails pode trazer.
Quer praticar automação e o resto da base do Python construindo projetos guiados? Conheça a Jornada Python, nosso curso de Python completo.
Nos vemos na próxima, Pythonista ![]()
"Porque o Senhor dá a sabedoria, e da sua boca vem a inteligência e o entendimento" Pv 2:6