Localizar E-mail e Anexo Automaticamente com Python
Nessa aula eu vou te mostrar como localizar e-mail e anexo automaticamente na sua caixa de entrada utilizando o Python para essa automação!
Para localizar e-mail e anexo com Python, conecte-se à caixa de entrada usando o módulo imaplib, busque as mensagens por critérios como remetente ou assunto e leia o conteúdo com o módulo email. A partir daí você identifica as partes com anexo e as salva em disco, automatizando a busca por arquivos recebidos.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
O que você aprende neste vídeo
Resposta rápida: A conexão é com a caixa de entrada por IMAP, e o endereço do servidor muda conforme o provedor. A busca aceita critérios combinados, como remetente, destinatário e assunto, e de cada mensagem dá para ler assunto, corpo e a lista de anexos. Não existe comando de download: o anexo vem como bytes, e o arquivo é recriado no disco em modo de escrita binária.
Neste vídeo (32 min):
- 1:00 - A biblioteca usada, e por que ler e-mail é um caminho diferente de enviar.
- 2:30 - Importar a caixa de e-mail e o operador que combina critérios de busca.
- 4:30 - Liberar o acesso de aplicativo na conta antes de tentar conectar.
- 5:30 - Definir usuário e senha, e por que a senha fica fora do arquivo de código.
- 7:00 - Conectar ao servidor, cujo endereço muda conforme o provedor de e-mail.
- 8:40 - Testar a conexão antes de escrever qualquer outra linha do programa.
- 9:30 - Como diagnosticar quando o login falha, em ordem.
- 10:00 - Buscar mensagens por critério, começando pelo remetente.
- 11:40 - Onde fica a lista completa de critérios que a busca aceita.
- 13:00 - Combinar mais de um critério ao mesmo tempo na mesma busca.
- 16:00 - Percorrer o resultado e ler o assunto e o corpo de cada mensagem.
- 18:00 - A segunda parte da aula: chegar até o anexo da mensagem.
- 21:40 - A lista de anexos de cada mensagem, e como saber se ela está vazia.
- 24:00 - Não existe download: o anexo vira bytes, e o arquivo é recriado no disco.
Trechos do vídeo:
- O endereço do servidor de leitura é próprio de cada provedor, e errar esse endereço dá o mesmo sintoma de senha errada. Testar a conexão sozinha, antes de qualquer busca, separa os dois casos.
- O anexo não é baixado: o conteúdo dele é lido como bytes e regravado em um arquivo novo no disco, aberto em modo de escrita binária. São três linhas, uma para ler, uma para criar e uma para escrever.
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Resumo
Nessa aula eu vou te mostrar como você pode criar um código para localizar e-mail ou anexos dentro do seu e-mail com o Python, ou seja, qualquer leitura ou extração de informações de dentro do seu e-mail.
Isso quer dizer que vamos poder integrar Python com e-mail para que você possa obter as informações desejadas de dentro do e-mail para complementar suas atividades ou seus códigos!
Localizar Email e Anexo Automaticamente com Python
Você já imaginou pode fazer uma busca automática de e-mail com Python? Como assim?
Imagine que você quer localizar e-mail e anexo dentro da sua caixa de entrada, agora imagine você podendo fazer isso de forma automática com o Python.
Isso te ajudaria bastante não é mesmo? Ainda mais se você tem que fazer isso diversas vezes ao dia, então hoje eu vou te ensinar a construir essa ferramenta que pode até deixar em uma pasta de códigos úteis sempre que precisar utilizar!
Busca Automática de E-mail com Python
Para poder fazer essa automação no email com Python nós vamos utilizar a biblioteca imap_tools que vai permitir você trabalhar com a integração Python com e-mail de forma simplificada.
OBS: Como a biblioteca não vem instalada, basta instalar no seu editor de Python: pip install imap_tools.
Assim vamos conseguir de forma mais fácil fazer essa busca de informações através desse protocolo imap!
OBS: Vale lembrar que vamos utilizar para essa aula o Jupyter Notebook, então se ainda não tiver o programa instalado basta clicar aqui que temos um post ensinando o passo a passo de instalação! Mas você vai poder utilizar qualquer editor de sua preferência!
Outro ponto interessante é que esse método que vamos utilizar para fazer a integração Python com email vai funcionar para qualquer e-mail, seja ele Gmail, Hotmail, entre outros!
from imap_tools import MailBox, AND
# pegar emails de um remetente para um destinatário
username = "seu_email"
password = "senha"
# lista de imaps: https://www.systoolsgroup.com/imap/
meu_email = MailBox('imap.gmail.com').login(username, password)
# criterios: https://github.com/ikvk/imap_tools#search-criteria
lista_emails = meu_email.fetch(AND(from_="remetente", to="destinatario"))
for email in lista_emails:
print(email.subject)
print(email.text)
# pegar emails com um anexo específico
lista_emails = meu_email.fetch(AND(from_="remetente"))
for email in lista_emails:
if len(email.attachments) > 0:
for anexo in email.attachments:
if "TituloAnexo" in anexo.filename:
print(anexo.content_type)
print(anexo.payload)
with open("Teste.xlsx", 'wb') as arquivo_excel:
arquivo_excel.write(anexo.payload)Esse é o código que vamos utilizar para obter as informações desejadas!
Como nesse exemplo eu vou usar uma conta do Gmail é necessário fazer uma configuração na conta para que você consiga utilizar esse código no seu e-mail, pois os e-mails possuem uma proteção contra automações.
Para isso basta clicar no círculo da sua conta que fica no canto superior direito do seu e-mail e selecionar a opção Gerenciar sua Conta do Google.

Feito isso nós vamos até a parte de segurança e por fim vamos até a parte de Acesso a app menos seguro. Aqui você vai ter que habilitar essa opção para que consiga utilizar esse código e fazer automação no e-mail com Python.

Agora podemos partir para a explicação do código para fazer essa automação!
O primeiro bloco que temos da importação da biblioteca até a linha que começa com meu_email é bem simples.
Vamos ter a importação da biblioteca, em seguida temos as informações de e-mail e senha do seu e-mail.
E por fim estamos fazendo o login dentro do e-mail. Nessa parte é importante que você teste o código até aqui para verificar se de fato está tudo funcionando.
Pois se não estiver funcionando nada depois vai funcionar, então é bom verificar se está tudo ok e se liberou os apps menos seguros no seu e-mail ou alguma configuração similar no seu servidor de e-mail.
OBS: Os e-mails possuem essa proteção para evitar esses acessos remotos e evitar automações desnecessárias, então se você não desativar essa proteção não vai conseguir utilizar o código.
O segundo bloco do nosso código é para que possamos obter e-mails de acordo com alguns critérios.
Lembrando que no próprio código já deixamos o link para a documentação da biblioteca, então se tiver dúvidas pode dar uma olhada para saber quais as informações pode obter.
Então podemos escolher por exemplo, um remetente E (AND operador lógico para E, para satisfazer mais de um critério ao mesmo tempo) destinatário.
Então nesse caso estaríamos buscando um e-mail com um remetente e destinatário específico, então só os e-mails que tiverem essas duas informações satisfeitas ao mesmo tempo que serão obtidas.
Ao rodar essa parte do código com os critérios desejados o programa vai verificar os e-mails que satisfazem essas condições e depois vai printar na tela os assuntos dos e-mails e logo abaixo o conteúdo desse e-mail em texto.

Aqui temos um pequeno exemplo do Python mostrando pra você o assunto e o conteúdo de cada um desses e-mails que satisfazem os critérios que colocou.
Agora o último bloco do nosso código é para que você consiga pegar um e-mail que tenha um anexo específico.
Então pode ser que tenha um e-mail do trabalho que tem um nome específico e você quer verificar quantos anexos tem no seu e-mail ou até mesmo pegar as informações desse anexo e salvar um arquivo no seu computador com esse conteúdo.
Então nesse exemplo nós vamos determinar um nome de um anexo que esteja no seu e-mail (nesse caso você pode enviar o arquivo que está disponível para o seu próprio e-mail para fazer o teste) para salvar as informações desse anexo dentro de um arquivo no seu computador.
Então já temos até uma estrutura de repetição que vai fazer a verificação de quantos e-mails temos e depois se eles possuem anexo, se possuir anexo vamos repetir o procedimento de mostrar as informações e salvar o arquivo no formato de Excel.
OBS: Você vai ver que ao rodar esse código você terá um arquivo em Excel criado com as informações do anexo.
Perguntas frequentes
1. Como acessar e-mails automaticamente com Python?
Você pode acessar e-mails via protocolo IMAP com o módulo nativo imaplib: conecte-se ao servidor, faça login e selecione a caixa de entrada. Para contas do Outlook desktop no Windows, também dá para usar a biblioteca pywin32 (win32com), controlando o programa diretamente. Depois, o módulo email interpreta o conteúdo das mensagens.
2. Como buscar um e-mail por assunto no Python?
Com o imaplib, use o método search passando o critério, como search(None, "SUBJECT", "relatório"), que retorna os IDs das mensagens correspondentes. Também dá para filtrar por remetente (FROM), data ou status de leitura. Depois, você busca cada mensagem pelo ID e processa o conteúdo com o módulo email.
3. Como baixar o anexo de um e-mail com Python?
Depois de ler a mensagem com o módulo email, percorra suas partes com walk() e localize as que têm get_content_disposition() == "attachment". Pegue o nome com get_filename() e grave os bytes com get_payload(decode=True) em um arquivo. Assim o anexo é salvo em disco automaticamente, pronto para uso.
4. É seguro usar minha senha de e-mail no Python?
Evite colocar a senha direto no código. O ideal é usar uma senha de app específica, gerada nas configurações da conta (como no Gmail), e guardá-la em uma variável de ambiente, não no script. Assim, seu login fica protegido e você pode compartilhar o código sem expor credenciais de acesso à caixa de e-mail.
Conclusão de Localizar E-mail e Anexo com Python
Nessa aula eu te mostrei como você pode localizar e-mail e anexo específicos para sua atividade.
Tudo isso é para facilitar o seu trabalho, pois você pode buscar por informações específicas e não precisar perder tempo procurando um e-mail ou um arquivo que esteja dentro dele.
Dessa forma você vai conseguir automatizar suas tarefas e até salvar as informações do anexo que tem dentro do seu computador de forma automática e muito rápida.
Assim você vai ganhar produtividade e pode até focar em outras atividades para ser mais eficiente!
Hashtag Treinamentos
Para acessar outras publicações de Python, clique aqui!


