8.1 Lendo email
Acho que já entendemos o suficiente sobre os fundamentos da rede. Vamos fazer algo mais interessante — afinal, há tantas coisas interessantes na rede. Que tal ler e enviar emails?
O email apareceu há 50 anos, 20 anos antes do primeiro navegador. Naquela época, programas especiais eram usados para enviar emails. O que isso significa para nós? Significa que o padrão (protocolo) para trabalhar com email é simples como água.
Protocolo POP3
(Post Office Protocol version 3) é usado para receber emails do servidor de correio. Ao contrário do IMAP
, POP3
geralmente baixa os emails para computador local e os remove do servidor. Em Python, para trabalhar com POP3
você pode usar a biblioteca poplib
.
Nota: Ao contrário do POP3, o protocolo IMAP (Internet Message Access Protocol) permite armazenar emails no servidor e sincronizar o estado entre dispositivos. IMAP é mais conveniente se você ler emails de diferentes dispositivos, enquanto o POP3 é mais adequado para armazenar emails localmente em um único dispositivo.
Passos principais para obter a lista de emails:
- Conectar ao servidor de email.
- Autenticação.
- Obter lista de emails.
- Baixar e ler emails.
- Desconectar do servidor.
Para escrever o primeiro aplicativo, precisaremos de duas bibliotecas: poplib
e email
. Se você não as tiver, instale-as. Você já conhece o gerenciador pip
.
Importante: Ao trabalhar com email, sempre siga as medidas de segurança. Nunca armazene senhas em texto claro no código. Use variáveis de ambiente ou armazenamento seguro para credenciais. Além disso, certifique-se de que seu código não será exposto publicamente para evitar vazamento de informações confidenciais.
1. Conexão e autenticação:
Conecte-se ao servidor de email via SSL
e acesse a conta de email com as credenciais fornecidas.
mailbox = poplib.POP3_SSL(pop3_server)
mailbox.user(username)
mailbox.pass_(password) # Usamos pass_ para prevenir conflito com a palavra-chave pass em Python
2. Obtendo informações da caixa de email:
Obtém o número de emails na caixa postal.
num_messages = len(mailbox.list()[1])
print(f"Quantidade de emails: {num_messages}")
3. Baixar e ler emails:
Baixando e lendo o último email.
# Exemplo: Lendo o último email
if num_messages > 0:
response, lines, octets = mailbox.retr(num_messages)
message = '\n'.join(line.decode('utf-8') for line in lines)
print("Conteúdo do último email:")
print(message)
Para parsing e exibição do conteúdo, existe uma biblioteca especial — email
. Ela pode decodificar o conteúdo dos emails, incluindo cabeçalhos e corpo do email.
Veja como ficará a versão final do nosso cliente de email.
import poplib
# Credenciais de login
username = 'your_email@example.com'
password = 'your_password'
# Conexão ao servidor de email Gmail
pop3_server = 'pop.gmail.com'
mailbox = poplib.POP3_SSL(pop3_server, 995)
# Login na caixa de email
mailbox.user(username)
mailbox.pass_(password) # Usamos pass_ para prevenir conflito com a palavra-chave pass em Python
# Obtendo informações da caixa de email
num_messages = len(mailbox.list()[1])
print(f"Quantidade de emails: {num_messages}")
# Exemplo: Lendo o último email
if num_messages > 0:
response, lines, octets = mailbox.retr(num_messages)
message = '\n'.join(line.decode('utf-8') for line in lines)
print("Conteúdo do último email:")
print(message)
# Fechando a conexão
mailbox.quit()
Você pode tentar ler seus emails, apenas insira o POP3-server
correto. Por exemplo, no exemplo acima, usei os dados do servidor Gmail. Se você estiver usando outro servidor de email, é fácil encontrar esses dados na internet.
8.2 Enviando email
Para enviar email usando o protocolo SMTP
(Simple Mail Transfer Protocol) em Python, você pode usar a biblioteca incorporada smtplib
. Este módulo fornece funções para estabelecer uma conexão com o SMTP-server
, autenticar e enviar emails.
Passos principais para enviar email:
- Conectar ao
SMTP-server
. - Autenticação.
- Formação da mensagem.
- Envio da mensagem.
- Fechamento da conexão.
1. Conectar ao SMTP-server
:
Conectar ao SMTP-server
e mudar para uma conexão segura com TLS
.
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Conexão segura
2. Autenticação:
Fazer login no SMTP-server
usando credenciais.
server.login(username, password)
3. Formação de uma mensagem simples em formato de string:
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
4. Envio da mensagem:
server.sendmail(from_addr, to_addr, message)
5. Fechamento da conexão:
server.quit()
Parece mais simples do que da última vez, o que é ótimo.
Todo o código, com tratamento de erros, ficará assim:
import smtplib
# Credenciais de login
smtp_server = 'smtp.gmail.com'
smtp_port = 587
username = 'your_email@gmail.com'
password = 'your_app_password' # Use a senha do aplicativo
# Endereços do remetente e destinatário
from_addr = 'your_email@gmail.com'
to_addr = 'recipient@example.com'
# Assunto e corpo do email
subject = 'Assunto do email'
body = 'Este é o texto do email.'
# Formação da mensagem em formato de string
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
try:
# Conexão ao servidor SMTP
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Conexão segura
# Autenticação
server.login(username, password)
# Envio da mensagem
server.sendmail(from_addr, to_addr, message)
print("Email enviado com sucesso!")
except Exception as e:
print(f"Erro ao enviar o email: {e}")
finally:
# Fechamento da conexão
server.quit()
A maior parte do código aqui são comentários e configurações do servidor, dá para enviar um email em 5 linhas. Tente — é muito interessante.
GO TO FULL VERSION