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

C# 正文或消息包含使用MailKit的方法,c#,imap,mailkit,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

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

你的问题是一团混乱(你的问题开始时说你正在试图找出如何搜索,然后你问如何对保存到文件中的原始消息进行base64解码),所以我不知道你到底想知道什么

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

var message = imapfolder.GetMessage (uid);
var text = message.TextBody;
这将是解码文本字符串(base64解码或引用可打印解码,如果需要)

MimeKit和都有关于如何使用它们的基础知识的有用信息。我强烈推荐阅读它们,因为它们可能会有所帮助

更新:

根据我在回答中添加的评论,听起来你想做的是这样吗

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

如果消息是Base64编码的,那么是的,您似乎必须对其进行解码。是的,但是如何解码?我需要搜索信息的过滤器,而不是解码机构-查找文本-下一条消息。我希望通过搜索方法获取消息UID数组。ImpFolder.search()已返回消息UID列表。你的评论使你的问题比以前更令人困惑。谢谢你的回答。例如,我有一条短信,上面写着“从Iphone收到”。我不想通过mailkit搜索接收此邮件。var query=SearchQuery.BodyContains(“Iphone”);-匹配消息var query=SearchQuery.BodyContains(“从Iphone接收”);-与消息不匹配所以,这是一个关键字?我不能使用像这样的Contains方法。BodyContains(“从Iphone接收”),我需要使用BodyContains(“Iphone”);像这样?看看我的最新答案。你的问题仍然很难理解,但我想我可能已经明白你想问什么了。对不起,我的英语很差。我想获取包含以下文本的消息UID—“从iPhone接收”。(我有这条短信)如果我搜索文本“从iPhone收到”,我无法获得UID,但当我使用搜索文本“iPhone”时,我可以获得UID。所以,我不能在搜索UID的消息中使用整条文本,我需要使用部分文本(对于e.x.Iphone)?我想如果你解释一下你的两个代码片段之间的区别会有所帮助。你不断向我们提供不完整的信息,迫使我们猜测你想说什么。这就好像我输入了一个句子的前半部分,希望你能理解其余的部分!你好吗从iPhone收到我要获取此消息的uid。我试图通过MessageContains和BodyContains方法获取uid。如果我从文本(例如.BodyContains(“你好吗?”)或.BodyContains(“从iPhone收到”)中搜索完整句子,我找不到此消息和uid。但是,如果我按句子词(例如.BodyContains(“iPhone”)或.BodyContains(“Received”)搜索,我会得到这条消息。为什么?