Search IMAP“;“搜索标题”;当搜索文本包含感叹号(!)、符号(&;)等时,命令失败

Search IMAP“;“搜索标题”;当搜索文本包含感叹号(!)、符号(&;)等时,命令失败,search,gmail,imap,Search,Gmail,Imap,我正在通过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 SE

我正在通过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"
UID SEARCH HEADER Message-ID {3}
abc
我已经阅读了IMAP语言规范,从ABNF语言规范来看,这些字符应该是有效的。为什么gmail会在“!”和“&”字符处截短这些搜索短语?有办法逃离他们吗?(我已经尝试过了!,但作为编码错误的字符串失败)。是否有一份RFC或文件显示了真正应该接受的内容?这是gmail的imap实现中的一个bug吗

我也尝试过文字格式,同样的结果:

UID SEARCH HEADER Message-ID {15}
abc!def@abc.com
仍被视为:

UID SEARCH HEADER Message-ID "abc"
UID SEARCH HEADER Message-ID {3}
abc
谢谢

IMAP RFC3501搜索命令:
形式语法:

几个月来,我一直在讨论这个问题

搜索标题消息ID


最终跳过了一些以“开头的MsgId搜索。我的答案主要是基于(Max)在对原始问题的评论中发现的,GMail的搜索实现使用了一个备份数据库,该数据库已经将文本内容拆分为单词标记,而不是存储全文并进行子字符串搜索

因此,这里有一个可能的解决方法,您可以在C#using my library(这是一个相当低级的IMAP库,因此应该可以轻松地转换为基本伪代码)中使用GMail:

//给定:text=“abc!abcdef@abc.com"
//在“!”上拆分搜索文本
var words=text.Split(新字符[]{'!'},StringSplitOptions.RemoveEmptyEntries);
//生成搜索查询。。。
var query=SearchQuery.HeaderContains(“消息ID”,单词[0]);
for(int i=1;i
我可以确认在搜索查询中使用感叹号没有什么特别之处。你很可能在gmail中发现了一个bug。我建议在开发过程中使用几种不同的IMAP服务器,特别是因为gmail的IMAP实现不太符合IMAP规范。谢谢nosid。不幸的是,我需要在这段代码中使用的IMAP服务器是gmail,所以在其他服务器上进行测试对解决这个错误没有帮助。但很高兴知道我没有看错说明书。我会设法向谷歌报告这个错误。是的,我目前在通过alpine mail客户端对Gmail进行IMAP搜索时遇到了这个问题,试图选择所有主题包含
的邮件。我还想问:如何克服GMail中的这个漏洞并进行这样的搜索?谷歌的IMAP搜索将事情分解为“单词”,这可能就是为什么特殊字符会被奇怪地对待的原因。我附和上面小组的建议:尝试使用X-GM-RAW并发送谷歌搜索关键词。