Imaplib de Python

Alguns exemplos úteis de uso do imaplib do python para verificar sua caixa de entrada. Isso só foi testado com uma caixa de entrada do gmail até agora.

Algumas leituras especialmente úteis sobre IMAP

IMAP

Definir um intervalo de tempo razoável

Você provavelmente não quer começar a rastrear sua caixa de entrada até os primeiros e-mails que recebeu, portanto, o módulo datetime será útil. Especificamente, gosto de usar:

date = (datetime.date.today() - datetime.timedelta(1)).strftime("%d-%b-%Y")

para obter uma data formatada corretamente representando ontem. Basta alterar o argumento para a função timedelta se quiser verificar mais adiante.

A sintaxe relevante para usar isso será algo ao longo das linhas de:

'(SENTSINCE {0})'.format(date)

isso irá dentro de um comando de pesquisa IMAP como parte de seus filtros

Especificando um remetente específico para procurar

Se estiver procurando um e-mail de alguém em particular, você pode usar:

'(FROM {0})'.format(eml.strip())

Seria perigoso omitir o strip call em geral.

Pesquisando somente emails não vistos

Para pesquisar apenas e-mails não vistos, a sintaxe relevante do python / IMAP é:

'(UNSEEN)'

Um Exemplo Completo

CONN = imaplib.IMAP4_SSL("imap.gmail.com")
login
("your email", "your password", CONN)
date
= (datetime.date.today() - datetime.timedelta(1)).strftime("%d-%b-%Y")
(_, data) = CONN.search(None, ('UNSEEN'), '(SENTSINCE {0})'.format(date)), '(FROM {0})'.format("someone@yahoo.com".strip()))
ids
= data[0].split()

Isso recuperará todos os e-mails NÃO Vistos enviados no último dia de ” alguem@yahoo.com “, na forma de id de mensagem, que você pode usar para processar posteriormente os e-mails individuais.

A função de login deve ser semelhante a:

conn.login(user, password)
conn
.list()
readonly = True
conn
.select("INBOX", readonly)

A parte somente leitura é realmente muito importante se você não quiser que o script mova os e-mails que encontrar para a sua seção “lida”. Com o bit somente leitura definido como verdadeiro, sua caixa de entrada não será modificada de forma alguma.