Есть ли способ использовать Python 3 IMAPlib для получения как адреса отправителя, так и соответствующего UID для данного сообщения - PullRequest
0 голосов
/ 27 июня 2018

Используя регулярные выражения, мне удалось извлечь все адреса отправителей из электронных писем, находящихся в моей папке «Входящие». Однако я много раз пытался и не получалось также извлечь связанные UID для этих отдельных электронных писем.

Вот что у меня есть:

    result, data = mail.search(None, 'ALL')
ids = data[0]
id_list = ids.split()
for i in id_list:
  typ, data = mail.fetch(i,'(RFC822)')
  for response_part in data:
    if isinstance(response_part, tuple):
      msg = email.message_from_bytes(response_part[1])
      sender = msg['from'].split()[-1]
      address = re.sub(r'[<>]','',sender)
# Ignore any occurences of own email address and add to list
  if not re.search(r'' + re.escape(LOGIN),address) and not address in email_list:
    email_list.append(address)
    print address

Вывод медленный (я полагаю, из-за регулярных выражений), но тем не менее он выполняет свою работу.

Выход:

    no-reply@mail.instagram.com
    no-reply@accounts.google.com
    rhodesi926@icloud.com
    wat@elevenyellow.com
    pinbot@notifications.pinterest.com
    support@autopin.co
    pinbot@account.pinterest.com
    info@shootbox.me
    pinbot@explore.pinterest.com
    bugra@boostfy.co
    mail-noreply@google.com
    pinbot@inspire.pinterest.com
    mua@mikasabeauty.com
    noreply@apple.com
    privacy-noreply@policies.google.com

Отчасти проблема в том, что я не понимаю, как идентификаторы UID связаны с отправителем и где эти идентификаторы хранятся в структуре IMAP.

Я предполагаю, что мог бы исправить правильное выражение, которое могло бы извлечь любую 4-значную комбинацию чисел из поля "UID:", тогда я боюсь, что это замедлит мой сценарий до ползания ....

Если кто-то понимает Imaplib и может помочь, я буду бесконечно благодарен. Спасибо.

...