【问题标题】:unable to get Yahoo mail by Message-ID using mailkit无法使用 mailkit 通过 Message-ID 获取 Yahoo 邮件
【发布时间】:2017-04-16 12:34:17
【问题描述】:

我想使用以下代码通过 Message-Id 获取邮件项。

     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 上运行良好,因为 Yahoo 邮件没有结果。我应该提到我可以获取所有邮件项目,但问题在于获取单个邮件。我做错了什么吗?

【问题讨论】:

    标签: imap yahoo mailkit


    【解决方案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)
            }  
    

    【讨论】:

      【解决方案2】:

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

      也就是说,您为什么要对 message-id 值进行 base64 解码?这没有意义。

      【讨论】:

      • Base64 也不是加密,而是编码。
      • 不同的服务器确实不同,但不能SEARCH HEADER MESSAGE-ID &lt;foo&gt; 会很了不起。我不应该怀疑messageIdStringValue 是否有问题。
      • 是的,我对此感到惊讶。我想我听说有些实现不喜欢 ,但我对那个记忆没有信心。
      • 'messageIdStringValue' 是作为参数的加密Id。解码后,它将是我要搜索的确切消息 ID。我也实现了没有 的搜索,但是没有用。
      • 我不明白为什么message-id首先是base64编码的,它不像是二进制数据。
      猜你喜欢
      • 2020-01-17
      • 1970-01-01
      • 2016-07-31
      • 2023-04-05
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多