我正在使用MailKit通过Imap接收邮件。
现在我需要该软件的搜索逻辑,但遇到了一些麻烦。
例如,我使用:
var query = SearchQuery.BodyContains("SomeTextfromEmail");
( or var query = SearchQuery.MessageContains("SomeTextfromEmail"); )
foreach (UniqueId uid in imapfolder.Search(query)){
//some logic
}
因此,我无法通过搜索过滤器获得包含文本的邮件。我已下载消息(message.WriteTo(string.Format(@“ C:{0} .eml”,uid));)并查看消息内容。消息文本为base-64格式。
如何正确执行?我需要从base64解码消息文本吗?
您的问题是一个混乱的混乱局面(您的问题开始时是说您正试图弄清楚如何搜索,然后最后要询问如何对存储到文件中的原始消息进行base64解码),所以我不知道正是您想知道的。
如果您只需要解码后的文本正文,则可以执行此操作:
var message = imapfolder.GetMessage (uid);
var text = message.TextBody;
这是已解码的文本字符串(如果需要,可以是base64解码或带引号的可打印解码)。
MimeKit README和FAQ都充满了有关如何使用它们的基础知识。我强烈建议您阅读它们,因为它们可能会有所帮助。
更新:
基于添加到我的答案中的评论,它听起来像这是您想要做的吗?
var matched = new UniqueIdSet ();
foreach (var uid in folder.Search (SearchQuery.BodyContains ("iPhone"))) {
var message = folder.GetMessage (uid);
var body = message.TextBody;
if (body != null && body.Contains ("Received from iPhone"))
matched.Add (uid);
}