IMail Folder ExtensionsFetch(IMail Folder, IListUnique Id, Message Summary Items, Cancellation Token) Method
Fetch the message summaries for the specified message UIDs.
Definition
Namespace: MailKit
Assembly: MailKit (in MailKit.dll) Version: 5.0.0
An enumeration of summaries for the requested messages.
Assembly: MailKit (in MailKit.dll) Version: 5.0.0
C#
public static IList<IMessageSummary> Fetch(
this IMailFolder folder,
IList<UniqueId> uids,
MessageSummaryItems items,
CancellationToken cancellationToken = default
)Parameters
- folder IMailFolder
- The folder.
- uids IListUniqueId
- The UIDs.
- items MessageSummaryItems
- The message summary items to fetch.
- cancellationToken CancellationToken (Optional)
- The cancellation token.
Return Value
IListIMessageSummaryAn enumeration of summaries for the requested messages.
Usage Note
In Visual Basic and C#, you can call this method as an instance method on any object of type IMailFolder. When you use instance method syntax to call this method, omit the first parameter. For more information, see Extension Methods (Visual Basic) or Extension Methods (C# Programming Guide).Remarks
Fetches the message summaries for the specified message UIDs.
It should be noted that if another client has modified any message in the folder, the mail service may choose to return information that was not explicitly requested. It is therefore important to be prepared to handle both additional fields on a IMessageSummary for messages that were requested as well as summaries for messages that were not requested at all.
Example
C#
public static void DownloadBodyAndAttachments (string baseDirectory)
{
using (var client = new ImapClient ()) {
client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);
client.Authenticate ("username", "password");
client.Inbox.Open (FolderAccess.ReadOnly);
// search for messages where the Subject header contains either "MimeKit" or "MailKit"
var query = SearchQuery.SubjectContains ("MimeKit").Or (SearchQuery.SubjectContains ("MailKit"));
var uids = client.Inbox.Search (query);
// fetch summary information for the search results (we will want the UID and the BODYSTRUCTURE
// of each message so that we can extract the text body and the attachments)
var items = client.Inbox.Fetch (uids, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);
foreach (var item in items) {
// determine a directory to save stuff in
var directory = Path.Combine (baseDirectory, item.UniqueId.ToString ());
// create the directory
Directory.CreateDirectory (directory);
// IMessageSummary.TextBody is a convenience property that finds the 'text/plain' body part for us
var bodyPart = item.TextBody;
if (bodyPart != null) {
// download the 'text/plain' body part
var plain = (TextPart) client.Inbox.GetBodyPart (item.UniqueId, bodyPart);
// TextPart.Text is a convenience property that decodes the content and converts the result to
// a string for us
var text = plain.Text;
File.WriteAllText (Path.Combine (directory, "body.txt"), text);
}
// IMessageSummary.HtmlBody is a convenience property that finds the 'text/html' body part for us
bodyPart = item.HtmlBody;
if (bodyPart != null) {
// download the 'text/html' body part
var html = (TextPart) client.Inbox.GetBodyPart (item.UniqueId, bodyPart);
// TextPart.Text is a convenience property that decodes the content and converts the result to
// a string for us
var text = html.Text;
File.WriteAllText (Path.Combine (directory, "body.html"), text);
}
// now iterate over all of the attachments and save them to disk
foreach (var attachment in item.Attachments) {
// download the attachment just like we did with the body
var entity = client.Inbox.GetBodyPart (item.UniqueId, attachment);
// attachments can be either message/rfc822 parts or regular MIME parts
if (entity is MessagePart) {
var rfc822 = (MessagePart) entity;
var path = Path.Combine (directory, attachment.PartSpecifier + ".eml");
rfc822.Message.WriteTo (path);
} else {
var part = (MimePart) entity;
// default to using the sending client's suggested fileName value
var fileName = attachment.FileName;
if (string.IsNullOrEmpty (fileName)) {
// the FileName wasn't defined, so generate one...
if (!MimeTypes.TryGetExtension (attachment.ContentType.MimeType, out string extension))
extension = ".dat";
fileName = Guid.NewGuid ().ToString () + extension;
}
var path = Path.Combine (directory, fileName);
// decode and save the content to a file
using (var stream = File.Create (path))
part.Content.DecodeTo (stream);
}
}
}
client.Disconnect (true);
}
}
Exceptions
| ArgumentNullException | uids is . |
| ArgumentException | One or more of the uids is invalid. |
| ObjectDisposedException | The IMailStore has been disposed. |
| ServiceNotConnectedException | The IMailStore is not connected. |
| ServiceNotAuthenticatedException | The IMailStore is not authenticated. |
| FolderNotOpenException | The folder is not currently open. |
| OperationCanceledException | The operation was canceled via the cancellation token. |
| IOException | An I/O error occurred. |
| ProtocolException | The server's response contained unexpected tokens. |
| CommandException | The command failed. |