繁体   English   中英

如何从IMAP服务器中选择特定邮箱?

[英]How to select a specific mailbox from IMAP server?

我的IMAP服务器上有以下邮箱(请参阅随附的屏幕截图)。 在此处输入图片说明

我只想选择邮箱Folder1并检查是否有任何子目录。 我已经尝试了以下代码:

svr = imaplib.IMAP4_SSL(imap_address)
svr.login(user, pwd)
svr.select('inbox') <<<<<<<<<<<<<<<<<
rv, data = svr.search(None, "ALL")
test, folders = svr.list('""', '*')
print(folders)

我认为将“收件箱”更改为“文件夹1”(用箭头指示的语句)将选择“ Folder1”,然后可以检索子目录。 但是什么也没发生,仍然显示与“收件箱”相同的结果。

有人可以帮助我了解我在这里做错了什么。

由于我不知道文件夹的名称,因此尝试了另一种方法。 我将首先收集根目录中的所有文件夹,然后一个个解析它们以检查是否存在任何子目录。

root_folders = []
svr = imaplib.IMAP4_SSL(imap_address)
svr.login(user, pwd)
svr.select('inbox')
response, folders = svr.list('""', '*')

def parse_mailbox(data):
    flags, b, c = data.partition(' ')
    separator, b, name = c.partition(' ')
    return flags, separator.replace('"', ''), name.replace('"', '')

def subdirectory(folder):
    #For directories 'Deleted Items', 'Sent Items', etc. with whitespaces,
    #the name of the directory needs to be passed with double quotes, hence '"' + name + '"'
    test, folders = obj.list('""','"' + name+ '/*"')
    if(folders is not None):
        print('Subdirectory exists') # you can also call parse_mailbox to find the name of sub-directory

for mbox in folders:
    flags, separator, name = parse_mailbox(bytes.decode(mbox))
    fmt = '{0}    : [Flags = {1}; Separator = {2}'
    if len(name.split('/')) > 1:
        continue
    else:
        root_folders.append(name)

for folder in root_folders:
    subdirectory(folder)

虽然这是我脚本中的量身定制的代码,但这应该是提出的问题的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM