使用MailKit的正文或消息包含方法

时间:2019-12-25 16:15:18

标签: c# imap mailkit

我正在使用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());
}

1 个答案:

答案 0 :(得分:0)

您的问题是一个混乱的混乱局面(您的问题开始时是说您正试图弄清楚如何搜索,然后最后要询问如何对存储到文件中的原始消息进行base64解码),所以我没有准确地知道您想知道什么。

如果您只需要解码后的文本正文,则可以执行以下操作:

var message = imapfolder.GetMessage (uid);
var text = message.TextBody;

这将是解码后的文本字符串(如果需要,可以是base64解码或带引号的可打印解码)。

MimeKit READMEFAQ都充满了有关如何使用它们的基础知识。我强烈建议您阅读它们,因为它们可能会有所帮助。

更新:

基于添加到我的答案中的评论,听起来像是您想要的吗?

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);
}