MailKit中不使用SearchQuery 直接传入文本字符串搜索邮件的实现方案
解决方案
client.Inbox 返回的 IMailFolder 接口实例,在ImapClient场景下实际运行类型就是ImapFolder,有两种可行方案实现原生IMAP字符串搜索:
方案1:类型转换后调用原生字符串重载
直接将IMailFolder强转为ImapFolder类型,即可调用支持传入原生搜索字符串的方法重载:// 强转为实际运行类型 ImapFolder imapInbox = (ImapFolder)inbox; string query = "SENTSINCE 2021-10-06 FROM mailer-daemon@myprovider.it"; foreach (var uid in imapInbox.Search(SearchOptions.All, query)) { var message = imapInbox.GetMessage(uid); Console.WriteLine("{0}|{1}|{2}|{3}|{4}", uid, message.Date, message.From, message.To,message.Subject); }方案2:使用
SearchQuery.Parse转换字符串(更稳妥)
MailKit原生提供了搜索字符串解析方法,无需修改原有类型定义,自动处理格式转义、兼容性适配:string rawQuery = "SENTSINCE 2021-10-06 FROM mailer-daemon@myprovider.it"; // 直接将原生IMAP搜索字符串转为SearchQuery对象 var query = SearchQuery.Parse(rawQuery); // 不需要强转类型,沿用原有IMailFolder实例即可 foreach (var uid in inbox.Search(query)) { var message = inbox.GetMessage(uid); Console.WriteLine("{0}|{1}|{2}|{3}|{4}", uid, message.Date, message.From, message.To,message.Subject); }
内容的提问来源于stack exchange,提问作者andros
相关产品推荐
相关产品推荐

