C# 正文或消息包含使用MailKit的方法
我正在使用MailKit通过Imap接收邮件 现在我需要一个软件的搜索逻辑,我得到了一些麻烦 例如,我使用: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
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”)搜索,我会得到这条消息。为什么?