IMail FolderGet Body Part(Unique Id, Body Part, Cancellation Token, ITransfer Progress) Method
Get the specified body part.
Definition
Namespace: MailKit
Assembly: MailKit (in MailKit.dll) Version: 5.0.0
The body part.
Assembly: MailKit (in MailKit.dll) Version: 5.0.0
C#
MimeEntity GetBodyPart(
UniqueId uid,
BodyPart part,
CancellationToken cancellationToken = default,
ITransferProgress? progress = null
)Parameters
- uid UniqueId
- The UID of the message.
- part BodyPart
- The body part.
- cancellationToken CancellationToken (Optional)
- The cancellation token.
- progress ITransferProgress (Optional)
- The progress reporting mechanism.
Return Value
MimeEntityThe body part.
Remarks
Gets the specified body part.
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 | part is . |
| ArgumentException | uid 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. |
| MessageNotFoundException | The IMailStore did not return the requested message body. |
| 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. |