2017-04-16 88 views
0

我想使用以下代码通过Message-Id获取邮件项目。使用mailkit无法通过Message-ID获取Yahoo邮件

 var messageId = messageIdStringValue.DecryptFromBase64(); 
      var newId = "<" + messageId + ">"; 
     var matches = Client.Inbox.Search(SearchQuery.HeaderContains("Message-ID", newId)); 
     foreach (var uid in matches) 
     { 

      var message = Client.Inbox.GetMessage(uid); 

     } 

它的正常工作与Gmail通过没有结果对于雅虎mail.I应该提到,我可以得到所有的邮件,但问题是在取单message.Am我做错了什么?

回答

1

感谢@jstedfast我发现搜索邮件的最佳方法是通过UniqueId而不是Message-ID,因为搜索命令可能不会以这种方式为不同的服务器返回结果。 下面的代码工作正常,所有服务器:

foreach (var item in Client.Inbox.Fetch(new[] { uId }, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure)) 
     { 
      var message = Client.Inbox.GetMessage(item.UniqueId) 
     } 
0

不同的IMAP服务器以不同方式实现SEARCH。

这就是说,你为什么base64解码message-id值?这没有意义。

+0

也Base64是不是一个加密,这是一个编码。 – Max

+0

不同的服务器确实有所不同,但是不能够搜索标题信息-ID '将是显着的。我不应该怀疑'messageIdStringValue'是否有问题。 – arnt

+0

是的,我也很惊讶。我想我听说有些实现不喜欢<>,但我对这个内存没有信心。 – jstedfast