TextSearchQuery 在 MailKit 中不起作用
TextSearchQuery not works in MailKit
我使用 MailKit 和 IMAP 客户端。我想收到指定主题的消息:
client.Inbox.Open(FolderAccess.ReadOnly);
var query = SearchQuery.SubjectContains("my_subject");
var uids = client.Inbox.Search(query);
if (!uids.Any())
MessageBox.Show("Empty list!");
但是 returns TextSearchQuery
(例如 SubjectContains
、BodyContains
、FromContains
...)的所有方法都不起作用,我得到了 MessageBox带有空列表信息。但是如果我的查询 return SearchQuery
例如:
var query = SearchQuery.NotSeen;
或
var query = SearchQuery.NotFlagged;
它工作正常。问题出在哪里?使用字符编码?
不同的 IMAP 服务器实现文本匹配的方式不同。一些 IMAP 服务器执行文字子字符串搜索,而其他服务器在消息到达时标记消息 text/subject 文本,并保留一个数据库,其中包含哪些消息包含哪些单词。
有些 IMAP 服务器会解码文本(如果已编码),有些则不会。
基于文本的搜索完全取决于您使用的 IMAP 服务器。
我解决了这个问题。我将主题中的“_”字符更改为“+”(在 Base64 中允许,也许这很重要)。
我使用 MailKit 和 IMAP 客户端。我想收到指定主题的消息:
client.Inbox.Open(FolderAccess.ReadOnly);
var query = SearchQuery.SubjectContains("my_subject");
var uids = client.Inbox.Search(query);
if (!uids.Any())
MessageBox.Show("Empty list!");
但是 returns TextSearchQuery
(例如 SubjectContains
、BodyContains
、FromContains
...)的所有方法都不起作用,我得到了 MessageBox带有空列表信息。但是如果我的查询 return SearchQuery
例如:
var query = SearchQuery.NotSeen;
或
var query = SearchQuery.NotFlagged;
它工作正常。问题出在哪里?使用字符编码?
不同的 IMAP 服务器实现文本匹配的方式不同。一些 IMAP 服务器执行文字子字符串搜索,而其他服务器在消息到达时标记消息 text/subject 文本,并保留一个数据库,其中包含哪些消息包含哪些单词。
有些 IMAP 服务器会解码文本(如果已编码),有些则不会。
基于文本的搜索完全取决于您使用的 IMAP 服务器。
我解决了这个问题。我将主题中的“_”字符更改为“+”(在 Base64 中允许,也许这很重要)。