首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mailkit搜索多个条件不起作用

使用mailkit搜索多个条件不起作用
EN

Stack Overflow用户
提问于 2019-08-08 04:07:34
回答 1查看 566关注 0票数 0

我有一个应用程序,必须发送一些通知电子邮件。一段时间后,如果我没有收到回复的邮件,我必须发送一个回复。问题出现在第三个回复上,导致之前发送的两个电子邮件都将发送新的回复。下面是I;ve tried..but它们似乎都不起作用的函数:

代码语言:javascript
复制
        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))

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

EN

回答 1

Stack Overflow用户

发布于 2019-08-08 09:59:43

IMAP的搜索功能(特别是在timespan解析方面)非常有限,因此您可能需要编写一些客户端逻辑来过滤消息,使之符合您实际希望找到的内容。

SearchQuery.BodyContains(mailid)开始-它是否会返回一个消息列表,包括您期望找到的消息?

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

要进行客户端搜索,我建议从对任何消息子集的folder.Fetch()调用开始(并且可能至少获取MessageSummaryItems.Envelope | MessageSummaryItems.UniqueId)。Envelope将为您提供大多数常见的消息头,您随后可以检查这些消息头。

例如:

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57401644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档