【问题标题】:Search after multiple criterias with mailkit doesn't work使用 mailkit 搜索多个条件不起作用
【发布时间】:2019-08-07 20:07:33
【问题描述】:

我有一个必须发送一些通知电子邮件的应用程序。一段时间后,如果我没有收到该邮件的回复,我必须发送回复。第三个回复出现问题,因为之前发送的两封电子邮件都会发送新回复。以下是我尝试过的功能..但它们似乎都不起作用:

        SearchQuery.BodyContains(mailid).And(SearchQuery.DeliveredAfter(DateTime.Now.AddMinutes(-10))

      SearchQuery.BodyContains(mailid).And(SearchQuery.SentAfter(DateTime.Now.AddMinutes(-10))

      SearchQuery.BodyContains(mailid).And(SearchQuery.SentSince(DateTime.Now.AddMinutes(-10))

我怎样才能只接受在我给定时间之后发送的电子邮件?

【问题讨论】:

    标签: c# mailkit


    【解决方案1】:

    IMAP 的搜索功能(尤其是关于时间跨度分辨率)非常有限,因此您可能需要编写一些客户端逻辑来将消息过滤到您真正希望找到的内容。

    SearchQuery.BodyContains(mailid) 开头 - 是否会返回包含您希望找到的消息的列表?

    如果没有,请不要使用该搜索。

    要进行客户端搜索,我建议从folder.Fetch() 调用您可以限制它的任何消息子集开始(并且可能至少获取MessageSummaryItems.Envelope | MessageSummaryItems.UniqueId)。 Envelope 将为您提供大部分常见的邮件标头,然后您可以检查它们。

    例如:

    var uidsWithMailId = folder.Search (SearchQuery.BodyContains (mailid));
    var items = folder.Fetch (uidsWithMailId, MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope);
    var tenMinutesAgo = DateTime.Now.AddMinutes (-10);
    var matches = new UniqueIdSet ();
    foreach (var item in items) {
        // check if the message was sent within the last 10 minutes
        if (item.Envelope.Date >= tenMinutesAgo) {
            // add the message UID to our list of matches
            matches.Add (item.UniqueId);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2020-02-19
      • 1970-01-01
      • 2014-11-13
      • 2017-06-08
      • 1970-01-01
      相关资源
      最近更新 更多