【问题标题】:What is the proper way to create IMAP subfolders using imapclient for Python?使用 imapclient for Python 创建 IMAP 子文件夹的正确方法是什么?
【发布时间】:2019-01-27 19:57:12
【问题描述】:

我的代码看起来像这样

import imapclient

archive_folder = "Archive"

aggregate_reports_folder = "{0}/Aggregate".format(archive_folder)
forensic_reports_folder = "{0}/Forensic".format(archive_folder)

server = imapclient.IMAPClient("example.com", use_uid=True)
server.login("user", "foobar")

if not server.folder_exists(archive_folder):
    server.create_folder(archive_folder)
if not server.folder_exists(aggregate_reports_folder):
    server.create_folder(aggregate_reports_folder)
if not server.folder_exists(forensic_reports_folder):
    server.create_folder(forensic_reports_folder)

它在 Office 365/Exchange 上运行良好,但在 dovecot 上运行良好。在 dovecot 上会导致错误:

错误:创建失败:[CANNOT] 邮箱名称无效:名称不能包含“/”字符

我尝试删除文件夹名称的/subfolder 部分,并首先运行select_folder(archive_folder),但这只会创建与存档相同级别的文件夹。然而,Thunderbird 可以毫无问题地创建子文件夹。

如何使用 imapclient 创建 IMAP 子文件夹,并以一种适用于所有 IMAP 服务器的方式?另外,如何将邮件移动到这些子文件夹?

【问题讨论】:

    标签: python imap dovecot imapclient


    【解决方案1】:

    我在鸽舍mailing list找到了答案。

    目前 Dovecot 仅支持 Maildir++ 目录布局,即 指定 '.'字符在文件系统中用作分隔符。

    所以在构建子文件夹路径时,使用. 作为分隔符,而不是/

    【讨论】:

    • list 命令的输出包含邮箱分隔符。我不知道 imapclient 是否能让您轻松访问这些信息。
    • @Max 是的,list_folders()/list_subfolders() 方法包括分隔符作为每个条目中的第二个元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2021-01-27
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    相关资源
    最近更新 更多