【问题标题】:Can't select 'public folder' and 'imported folder' with imap zimbra无法使用 imap zimbra 选择“公共文件夹”和“导入的文件夹”
【发布时间】:2019-10-02 13:56:57
【问题描述】:

“公共文件夹”是您与他人共享的文件夹,如果有人在其中添加电子邮件,您也会在此文件夹中收到它。

“导入的文件夹”是从其他电子邮件帐户(例如 Gmail)导入的文件夹。

我想要做的只是使用 imap 查看 zimbra 上的一些邮件,但是当一个文件夹是公共的或导入的文件夹时,它就不起作用了

mail = imaplib.IMAP4(user['serv'], user['port'])
mail.login(user['name'], user['passwd'])
mail.select("INBOX") #which is an imported folder

imaplib.IMAP4.error: SELECT 命令错误: BAD [b'parse error: zero-length content']

文件夹不是空的,但内容似乎被某种方式隐藏了

mail = imaplib.IMAP4(user['serv'], user['port'])
mail.login(user['name'], user['passwd'])
mail.select("Shared mailbox") #which is a public folder

imaplib.IMAP4.error: EXAMINE 命令错误:BAD [b"解析错误:错误字符;预期为 '(' 但得到了 'd'"]

在“公共文件夹”的情况下,只有当我不是创建它的人时才会发生,即使拥有管理员权限(添加、删除电子邮件的权限)

所以我想知道是否有人如何解决这些问题


编辑:

当文件夹的名称不是 unidecode 时,我发现另一个崩溃

UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 1: ordinal not in range(128)

我不知道这里需要什么编码,所以我尝试了'ascii'

UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 1: ordinal not in range(128)

我也试过'utf-8'

imaplib.IMAP4.error: SELECT command error: BAD [b'parse error: extra characters at end of command']

【问题讨论】:

  • 有空格的文件夹需要手动引用:'"共享邮箱"'。
  • 有什么方法可以不用手动完成吗?
  • 没有。使用 LIST 获取文件夹的实际名称。 IMAP 文件夹中没有非 ASCII。它们是(修改的)UTF-7 编码的。
  • 如果您愿意,您可以随时添加引号,它们不会造成伤害。

标签: python-3.x email imap zimbra


【解决方案1】:

for i in mail.list()[1]: l = i.decode().split(' "/" ') if l[1][1:len(l[1])-1] != "" and l[1][1:len(l[1])-1] not in banned: typ, data = mail.select('"{0}"'.format(l[1][1:len(l[1])-1]))

这解决了所有问题,不知道为什么我们需要将电子邮件名称放在单引号和双引号之间,但它确实有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 2020-04-20
    • 1970-01-01
    相关资源
    最近更新 更多