Ищите электронную почту, а затем извлекайте ее содержимое с помощью модуля Python 3+ imaplib - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь создать что-то, что находит письмо по его заголовку, а затем что-то ищет в его содержимом.

import email, imaplib, re, quopri
username = "" 
password = ""
mail = imaplib.IMAP4_SSL("imap.mail.yahoo.com", port=993)
mail.login(username, password)
mail.list()

success, emai = mail.search(None, '(SUBJECT "check this out")')

for x in emai[0].split():
    mai, dat = mail.fetch(x, "(RFC822)")
    decoded = quopri.decodestring(dat[0][1].decode())
    email_msg = email.message_from_string(decoded)
    break

link = re.search(r'test1 (.*?) test2', str(email_msg))
print(link)

Очевидно, мой код запутан, но этот пример должен показать все, что мне нужно, чтобы помочь.Например, я отправил себе электронное письмо с именем «check this out» с «test1 hit test2» в качестве его содержимого.Однако я изо всех сил пытался разобраться, поэтому я прошу вас, ребята, помочь.Как мне найти письмо, а затем получить его содержимое?

Спасибо!

1 Ответ

0 голосов
/ 24 февраля 2019
for x in emai[0].split():
    mai, dat = mail.fetch(x, "(RFC822)")
    email_msg = email.message_from_string(dat[0][1])
    if email_msg.is_multipart():
        for payload in email_msg.get_payload(decode=True):
        link = re.search(r'test1 (.*?) test2', payload.get_payload(decode=True))
        print(link)
    else:
        link = re.search(r'test1 (.*?) test2', email_msg.get_payload(decode=True))
        print(link)
    break
...