首页 > 解决方案 > 使用 imapclient for Python 创建 IMAP 子文件夹的正确方法是什么?

问题描述

我有看起来像这样的代码

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 可以毫无问题地创建子文件夹。

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

标签: pythonimapdovecotimapclient

解决方案


我在 dovecot邮件列表中找到了答案。

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

因此,在构建子文件夹路径时,.请用作分隔符,而不是/.


推荐阅读