More .NET libraries
-
Rebex Mail Pack
IMAP, MS Graph, EWS, POP3, SMTP, MIME, S/MIME, MSG
-
Rebex Total Pack
All Rebex .NET libraries together
Back to feature list...
Searching
On this page:
Searching basics
IMAP features a powerful SEARCH command.
To search for messages matching specified criteria, use Imap
object's Search
method.
It accepts a variable number of search parameters and supports basic logical operators, which makes complex queries possible.
Tip: You can choose which message fields to retrieve to improve the performance of your application.
Note: Please note that searching only operates on the selected folder.
// create IMAP client instance, connect, log in, select folder var imap = new Rebex.Net.Imap(); imap.Connect(hostname, SslMode.Implicit); imap.Login(username, password); imap.SelectFolder("Inbox"); // find messages from Joe ImapMessageCollection list = imap.Search(ImapSearchParameter.From("joe@example.org")); // print some info about mails from Joe foreach (ImapMessageInfo info in list) { Console.WriteLine("[{0}] {1}", info.ReceivedDate, info.Subject); }
' create IMAP client instance, connect, log in, select folder Dim imap As New Rebex.Net.Imap() imap.Connect(hostname, SslMode.Implicit) imap.Login(username, password) imap.SelectFolder("Inbox") ' find messages from Joe Dim list As ImapMessageCollection = imap.Search(ImapSearchParameter.From("joe@example.org")) ' print some info about mails from Joe For Each info As ImapMessageInfo In list Console.WriteLine("[{0}] {1}", info.ReceivedDate, info.Subject) Next
Tip: See the table below for common search criteria or the complete list of more.
From, subject, full-text and other criteria
IMAP offers a lot of search parameters. The table below lists some of them. See the API documentation for the complete list of search criteria.
Search parameter | Description |
---|---|
From(address) | Messages that contain the specified string in their From field. |
To(address) | Messages that contain the specified string in their To field. |
CC(address) | Messages that contain the specified string in their CC field. |
Bcc(address) | Messages that contain the specified string in their BCC field. |
Subject(queryTerm) | Messages that contain the specified string in their Subject field. |
Body(queryTerm) | Messages that contain the specified string in their body. |
FullText(queryTerm) | Messages that contain the specified string in their headers or body. |
Arrived(on) | Messages that arrived on the specified date (disregarding time). |
Arrived(since, before) | Messages that arrived in the specified date interval (disregarding time). |
Sent(on) | Messages that were sent on the specified date (disregarding time). |
Sent(since, before) | Messages that were sent in the specified date interval (disregarding time). |
HasFlagsAllOf(flags) | Messages with all the specified flags set. |
HasFlagsNoneOf(flags) | Messages with none of the specified flags set. |
Header(headerName, query) | Messages that contain the specified string in the specified header. |
Size(min, max) | Messages whose size is within the specified interval. |
Unread | Messages that don't have the Seen flag set. |
All | Search for all messages. Same as GetMessageList method. |
More... | Click for a complete list... |
The following code uses several search criteria together:
// create IMAP client instance, connect, log in, select folder // ... // find messages from Joe which arrived today (IMAP ignores the time part) // and have "Holiday" in subject ImapMessageCollection list = imap.Search( ImapSearchParameter.From("joe@example.org"), ImapSearchParameter.Arrived(DateTime.Now), ImapSearchParameter.Subject("Holiday"));
' create IMAP client instance, connect, log in, select folder ' ... ' find messages from Joe which arrived today (IMAP ignores the time part) ' and have "Holiday" in subject Dim list As ImapMessageCollection = imap.Search( ImapSearchParameter.From("joe@example.org"), ImapSearchParameter.Arrived(DateTime.Now), ImapSearchParameter.Subject("Holiday"))
Retrieving specific fields
By default, the Search
method returns the
Envelope
information
(headers such as Date
, From
, To
, Subject
).
To retrieve more (or less) information, use ImapListFields
argument.
The following code finds emails from Joe and retrieves the Envelope
and message bodies:
// create IMAP client instance, connect, log in, select folder // ... // find messages from Joe // retrieve Envelope and Body ImapMessageCollection list = imap.Search( ImapListFields.Envelope | ImapListFields.Body, ImapSearchParameter.From("joe@example.org")); // print some info about mails from Joe foreach (ImapMessageInfo info in list) { Console.WriteLine("[{0}] {1}", info.ReceivedDate, info.Subject); Console.WriteLine("-----"); if (info.HasBodyText) Console.WriteLine(info.BodyText); else Console.WriteLine("... no text body to show ..."); Console.WriteLine("-----"); }
' create IMAP client instance, connect, log in, select folder ' ... ' find messages from Joe ' retrieve Envelope and Body Dim list As ImapMessageCollection = imap.Search( ImapListFields.Envelope Or ImapListFields.Body, ImapSearchParameter.From("joe@example.org")) ' print some info about mails from Joe For Each info As ImapMessageInfo In list Console.WriteLine("[{0}] {1}", info.ReceivedDate, info.Subject) Console.WriteLine("-----") If info.HasBodyText Then Console.WriteLine(info.BodyText) Else Console.WriteLine("... no text body to show ...") End If Console.WriteLine("-----") Next
Searching within a message subset
In some cases, you already have a subset of messages and you would like only search
in this specific subset. This can be done with ImapSearchParameter.MessageSet
method:
// create IMAP client instance, connect, log in, select folder // ... // find messages from Joe ImapMessageCollection list = imap.Search( ImapListFields.UniqueId, ImapSearchParameter.From("joe@example.org")); // create message set based on found mails ImapMessageSet uidset = list.ToUniqueIdMessageSet(); // perform some searches within message set (mails from Joe) ImapMessageCollection list1 = imap.Search( ImapSearchParameter.MessageSet(uidset), ImapSearchParameter.Unread); ImapMessageCollection list2 = imap.Search( ImapSearchParameter.MessageSet(uidset), ImapSearchParameter.FullText("Holiday"));
' create IMAP client instance, connect, log in, select folder ' ... ' find messages from Joe Dim list As ImapMessageCollection = imap.Search( ImapListFields.UniqueId, ImapSearchParameter.From("joe@example.org")) ' create message set based on found mails Dim uidset As ImapMessageSet = list.ToUniqueIdMessageSet() ' perform some searches within message set (mails from Joe) Dim list1 As ImapMessageCollection = imap.Search( ImapSearchParameter.MessageSet(uidset), ImapSearchParameter.Unread) Dim list2 As ImapMessageCollection = imap.Search( ImapSearchParameter.MessageSet(uidset), ImapSearchParameter.FullText("Holiday"))
Logical operators - AND, OR, NOT
You can combine search criteria using And
, Or
and Not
logical operators.
Please note that Search
method combines given arguments using And
operator by default when
multiple criteria are specified.
// create IMAP client instance, connect, log in, select folder // ... // find messages from Joe OR John, // AND whose subject contains "Holiday", // AND are NOT marked as deleted ImapMessageCollection list = imap.Search( ImapSearchParameter.Or( ImapSearchParameter.From("joe@example.org"), ImapSearchParameter.From("john@example.org")), ImapSearchParameter.Subject("Holiday"), ImapSearchParameter.Not(ImapSearchParameter.Deleted));
' create IMAP client instance, connect, log in, select folder ' ... ' find messages from Joe OR John, ' AND whose subject contains "Holiday", ' AND are NOT marked as deleted Dim list As ImapMessageCollection = imap.Search( ImapSearchParameter.Or( ImapSearchParameter.From("joe@example.org"), ImapSearchParameter.From("john@example.org")), ImapSearchParameter.Subject("Holiday"), ImapSearchParameter.Not(ImapSearchParameter.Deleted))
Back to feature list...