Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
147 views
in Technique[技术] by (71.8m points)

c# - MailKit SearchQuery.FromContains("")

I am writing a little spams deletion tool for myself. This includes spams where the "FROM" field is empty. Unfortunately, when I try to enter a definition to search by an empty string

SearchQuery.FromContains("")

, I get an error saying that the string cannot be empty.

Anybody have any ideas on this? How can I filter emails based on an empty "TO" or "FROM" field?

Best regards Cezary

question from:https://stackoverflow.com/questions/65897971/mailkit-searchquery-fromcontains

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The IMAP SEARCH command is the wrong approach for this, unfortunately, because a search for an empty string will match everything (not just messages with an empty From header or an empty From address).

The best way to do this would be something more like this:

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;
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...