Python - 根据条件搜索不同的imap收件箱

Python - Searching different imap inboxes based on conditions

有没有办法根据 python imap4 库的条件搜索不同的收件箱? 我根本想不出一种根据条件检查某些子文件夹的方法。 到目前为止,我是这样从 "Inbox" 中选择子文件夹的:

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)

如果有人能找出我的大脑停止运作的地方,我会很高兴。

imap.list() 列出所有文件夹和子文件夹,imap.list(directory = '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"' ]

希望对您有所帮助

谢谢大家的帮助。我有点想通了自己。当您获取收件箱的状态时,您会得到一个字典,字典 [1] 是未读邮件的编号。如果这是空的,它只是 returns "[b'']" 所以我写了一个 if 子句,将我的输出与空收件箱 no_mails = [b''] 的输出进行比较,并告诉代码运行 这在所有子文件夹中。

from imap_tools import MailBox
with MailBox('imap.mail.com').login('test@mail.com', 'password') as mailbox:
    # get all folders
    for f in mailbox.folder.list():
        print(f['name'])
    # get INBOX subfolders
    for f in mailbox.folder.list('INBOX'):
        print(f['name'])

https://github.com/ikvk/imap_tools