【问题标题】:How to search imap inbox with mailkit based on multiple condition?如何根据多个条件使用mailkit搜索imap收件箱?
【发布时间】:2020-04-18 06:12:29
【问题描述】:

我想根据 NotSeen 和 NotDeleted 等多个条件使用 mailkit 搜索 imap 收件箱。如果我们进行单独的搜索查询,我知道查询是可以接受的。

var uids = client.Inbox.Search(SearchQuery.NotSeen); 
var uids = client.Inbox.Search(SearchQuery.NotDeleted );   

但我需要将这两个查询放在一起并根据条件获取所有 Uid。 任何帮助将不胜感激。

【问题讨论】:

    标签: c# asp.net mailkit


    【解决方案1】:

    您可以使用 And() 和/或 Or() 组合搜索查询:

    var uids = client.Inbox.Search (SearchQuery.NotSeen.And (SearchQuery.NotDeleted));
    

    var uids = client.Inbox.Search (SearchQuery.And (SearchQuery.NotSeen, SearchQuery.NotDeleted));
    

    【讨论】:

    • 感谢您的回复...很好的答案:)
    • 如果我需要根据 SearchQuery 搜索/获取前 10 封电子邮件怎么办?
    • @ParthAkbari 你有 2 个选项。要么像上面那样使用Search 方法,但只使用前10个uid(假设你想要默认排序)......或者你可以像上面一样构造SearchQuery,然后指定你自己的排序顺序,然后改为调用Sort 方法(它返回与Search 相同的结果,但以您要求的任何顺序)。例如:var uids = folder.Sort (query, new OrderBy[] { OrderBy.ReverseArrival });
    【解决方案2】:

    这个sn-p添加一个条件搜索条件主查询已经设置

    var query = MailKit.Search.SearchQuery.FromContains("anyone@gmail.com")
                                .And(MailKit.Search.SearchQuery.SubjectContains("Your Subject"));
    
    query = query .And(MailKit.Search.SearchQuery.DeliveredAfter(DateTime.Parse("2020-02-28")));
    

    【讨论】:

      【解决方案3】:

      好的,我找到了管理它的方法。如果您有更好的方法,请建议我。

                  var unread = client.Inbox.Search(SearchQuery.NotSeen);
                  var Deleted = client.Inbox.Search(SearchQuery.Deleted);
                  var Res  = unread.Except(Deleted).ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-02
        • 2018-04-18
        • 1970-01-01
        • 2014-10-24
        • 2022-01-24
        • 1970-01-01
        • 2017-12-04
        相关资源
        最近更新 更多