我有一个应用程序,必须发送一些通知电子邮件。一段时间后,如果我没有收到回复的邮件,我必须发送一个回复。问题出现在第三个回复上,导致之前发送的两个电子邮件都将发送新的回复。下面是I;ve tried..but它们似乎都不起作用的函数:
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))我怎样才能只接受在我给出的时间之后发送的电子邮件?
发布于 2019-08-08 09:59:43
IMAP的搜索功能(特别是在timespan解析方面)非常有限,因此您可能需要编写一些客户端逻辑来过滤消息,使之符合您实际希望找到的内容。
从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);
}
}https://stackoverflow.com/questions/57401644
复制相似问题