CodeGym /Cursos /Python SELF PT /Trabalhando com email

Trabalhando com email

Python SELF PT
Nível 24 , Lição 2
Disponível

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.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION