如果邮箱名称包含非英语符号,则返回“ BAD无法解析命令”

时间:2018-09-25 20:48:11

标签: imap chilkat

我正在使用Chilkat.IMAP组件从IMAP服务器获取电子邮件。如果邮箱名称包含非英语符号,则返回“ BAD无法解析命令”:

----IMAP REQUEST----
aaai LIST "[Gmail]/" "%"
----IMAP RESPONSE----
* LIST (\All \HasNoChildren) "/" "[Gmail]/All Mail"
* LIST (\HasChildren \Trash) "/" "[Gmail]/Bin"
* LIST (\Drafts \HasNoChildren) "/" "[Gmail]/Drafts"
* LIST (\HasNoChildren \Important) "/" "[Gmail]/Important"
* LIST (\HasNoChildren \Sent) "/" "[Gmail]/Sent Mail"
* LIST (\HasNoChildren \Junk) "/" "[Gmail]/Spam"
* LIST (\HasNoChildren) "/" "[Gmail]/&BB8EMAQ,BDoEMA-"
aaai OK Success

----IMAP REQUEST----
aaaj LIST "[Gmail]/All Mail/" "%"
----IMAP RESPONSE----
aaaj OK Success

----IMAP REQUEST----
aaap LIST "[Gmail]/Папка/" "%"
----IMAP RESPONSE----
aaap BAD Could not parse command

2 个答案:

答案 0 :(得分:1)

默认情况下,IMAP不发送8位字符,并且原始协议将具有非英语ASCII字符的邮箱定义为UTF-7编码(进行了一些修改)。这就是您看到的&BB8EMAQ,BDoEMA-

您可以向应用程序添加UTF-7编码/解码,或者,如果服务器足够新,可以使用ENABLE UTF-8模式。注意:启用UTF-8可能会在您不希望看到的地方获得Unicode。 Gmail确实支持此扩展程序。

> a LIST "" *
< ...
< * LIST (\HasChildren) "/" "&AOk-cole"

> b ENABLE UTF8=ACCEPT
< ...
< * LIST (\HasChildren) "/" "école"

这是UTF-7字符串分解的方式:

[Gmail]/&BB8EMAQ,BDoEMA-

&和-移入和移出解码模式,所以看起来像

"[Gmail]/" + mUTF7decode("BB8EMAQ,BDoEMA")

这是一个python 3 one liner对其进行解码。添加“ ===”以满足base64填充要求,并且altchars指定base64编码的最后两个字符:

>>> import base64;  base64.b64decode("BB8EMAQ,BDoEMA===", altchars="+,").decode("utf-16be")
'Папка'

答案 1 :(得分:0)

可能是您使用的Chilkat版本太旧。尝试最新版本,应该可以正常工作。如果没有,请告诉我们。