【发布时间】:2012-03-24 06:41:21
【问题描述】:
我正在通过 python 访问 GMail 的 IMAP 接口。我运行这样的命令:
UID SEARCH HEADER Message-ID "abcdef@abc.com"
成功(返回匹配消息的 1 个 UID,如果不存在则返回 0)。但是,如果搜索文本包含某些字符(如 & 或 !),则搜索文本在该点被截断。这意味着:
UID SEARCH HEADER Message-ID "!abcdef@abc.com"
被视为相同
UID SEARCH HEADER Message-ID ""
还有:
UID SEARCH HEADER Message-ID "abc!def@abc.com"
被视为:
UID SEARCH HEADER Message-ID "abc"
我浏览了 IMAP 语言规范,从 ABNF 语言规范看来,这些字符应该是有效的。为什么 gmail 会在“!”处截断这些搜索短语和“&”字符?有没有办法摆脱它们? (我试过了!,作为编码错误的字符串失败)。是否有 RFC 或文档显示真正应该接受的内容?这是 gmail 的 imap 实现中的错误吗?
我也尝试过文字格式,结果相同:
UID SEARCH HEADER Message-ID {15}
abc!def@abc.com
仍被视为:
UID SEARCH HEADER Message-ID {3}
abc
谢谢!
IMAP RFC3501 搜索命令:https://www.rfc-editor.org/rfc/rfc3501#section-6.4.4 正式语法:https://www.rfc-editor.org/rfc/rfc3501#section-9
【问题讨论】:
-
我可以确认在搜索查询中使用感叹号并没有什么特别之处。您很可能在 gmail 中发现了一个错误。我建议在开发过程中使用几种不同的 IMAP 服务器,特别是因为 gmail 的 IMAP 实现并不以符合 IMAP 规范而闻名。
-
谢谢诺西德。不幸的是,我需要与此代码一起使用的 IMAP 服务器是 gmail,因此在其他人身上进行测试对解决此错误没有帮助。但很高兴知道我没有读错规范。我会尝试找到一种方法将这个错误报告给谷歌。
-
是的,我目前在通过 alpine 邮件客户端在 Gmail 上执行 IMAP 搜索时遇到此问题,尝试选择主题包含
!的所有邮件。 -
我还想问:如何克服 GMail 中的这个错误并进行此类搜索?
-
Google 的 IMAP 搜索将事物分解为“单词”,这可能就是特殊字符被奇怪对待的原因。我赞同上述小组中的建议:尝试使用 X-GM-RAW 并发送谷歌搜索关键字。