Python - Поиск различных почтовых ящиков в зависимости от условий - PullRequest
0 голосов
/ 31 марта 2020

Есть ли способ поиска в разных почтовых ящиках на основе условия с python imap4-библиотекой? Я просто не могу обернуть голову, чтобы проверить определенные подпапки в зависимости от условия. До сих пор я выбирал подпапки из папки «Входящие» следующим образом:

imap = imaplib.IMAP4_SSL(host=imap_host)
imap.login(imap_user, imap_pass)

unseen_mails = imap.select('Inbox.Private.folder1')

# this is the second subfolder within "Private"
# unseen_mails = imap.select('Inbox.Private.folder2')

unseen_mails = imap.search(None, '(UNSEEN)')
unseen_mails = unseen_mails[1]
print(unseen_mails)

Был бы рад, если бы кто-то мог выяснить, где мой мозг перестал функционировать.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Спасибо, ребята, за вашу помощь. Я вроде понял это сам. Когда вы выбираете состояние папки «Входящие», вы получаете dict, а dict [1] - номер непрочитанного сообщения. Если оно пустое, оно просто возвращает «[b '']», поэтому я написал предложение if, которое сравнивает мой вывод с пустым входящим почтовым ящиком no_mails = [b ''] и велел коду выполнить это во всех подпапках.

0 голосов
/ 02 апреля 2020
В

imap.list() перечислены все папки и подпапки, а в imap.list(directory = 'Inbox') перечислены все дочерние папки Inbox. Затем вы можете извлечь имена папок и найти все, которые имеют / в имени, чтобы найти подпапки.

for folder in (imap.list()[1]):
    folder = folder.decode()                        # folder = '(\Marked \HasNoChildren) "/" "Inbox/Privare/Subfolder1"'
    flags, name = folder.split(' "/" ')             # name = 'Inbox/Private/Subfolder1'

    if '/' in name:
        split_val = name.split('/')
        folderName = split_val[-1]                  # folderName = 'Subfolder1'
        parents = split_val[0:-1]                   # parents = ['Inbox', 'Private']

    flags = flags.split('\\')
    flags.remove(flags[0])
    flags = [each.strip(' )') for each in flags]    # flags = ['Marked', 'HasChildren']


name = 'Inbox'    # Example of fetching list for directory
typ, data = imap.list(directory = name) 

# [ b'(\\Marked \\HasChildren) "/" "Inbox"',
#   b'(\\HasNoChildren) "/" "Inbox/Subfolder"' ]

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...