首页 > 解决方案 > MailKit SearchQuery.FromContains("")

问题描述

我正在为自己编写一个垃圾邮件删除工具。我希望此过滤器包含“发件人”字段为空的电子邮件。不幸的是,当我尝试通过搜索这样的空字符串来输入这样的定义时......

SearchQuery.FromContains("")

...我收到一条错误消息,指出字符串不能为空。

有人对此有任何想法吗?如何根据空的“收件人”或“发件人”字段过滤电子邮件?

标签: c#mailkit

解决方案


不幸的是,IMAP SEARCH 命令是错误的方法,因为搜索空字符串将匹配所有内容(不仅仅是带有空 From 标头或空 From 地址的消息)。

最好的方法是这样的:

var messages = folder.Fetch (0, -1, MessageSummaryItems.Envelope | MessageSummaryItems.UniqueId);
var spamUids = new UniqueIdSet ();
foreach (var message in messages) {
    if (message.Envelope?.From.Count == 0) {
        // This means there are 0 addresses in the From header
        spamUids.Add (message.UniqueId);
        continue;
    }

    if (message.Envelope?.To.Count == 0) {
        // This means there are 0 addresses in the To header
        spamUids.Add (message.UniqueId);
        continue;
    }
}

推荐阅读