我正在使用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解码消息文本吗?
问题在这里:
var query = SearchQuery.BodyContains("Iphone").And(SearchQuery.All); //this construction find messages in folder
foreach (var uid in imapfolder.Search(query))
{
Console.WriteLine(message.From + " : " + uid.ToString());
}
var query = SearchQuery.BodyContains("Received from Iphone").And(SearchQuery.All); //this construction can't find message in folder
foreach (var uid in imapfolder.Search(query))
{
Console.WriteLine(message.From + " : " + uid.ToString());
}
答案 0 :(得分:0)
您的问题是一个混乱的混乱局面(您的问题开始时是说您正试图弄清楚如何搜索,然后最后要询问如何对存储到文件中的原始消息进行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);
}