Body |
public class BodyPartBasic : BodyPart
The BodyPartBasic type exposes the following members.
Name | Description | |
---|---|---|
BodyPartBasic | Initializes a new instance of the BodyPartBasic class. |
Name | Description | |
---|---|---|
ContentDescription | Gets the Content-Description of the body part, if available. | |
ContentDisposition | Gets the Content-Disposition of the body part, if available. | |
ContentId | Gets the Content-Id of the body part, if available. | |
ContentLanguage | Gets the Content-Language of the body part, if available. | |
ContentLocation | Gets the Content-Location of the body part, if available. | |
ContentMd5 | Gets the MD5 hash of the content, if available. | |
ContentTransferEncoding | Gets the Content-Transfer-Encoding of the body part. | |
ContentType |
Gets the Content-Type of the body part.
(Inherited from BodyPart) | |
FileName | Get the name of the file. | |
IsAttachment | Determines whether or not the body part is an attachment. | |
Octets | Gets the size of the body part, in bytes. | |
PartSpecifier |
Gets the part specifier.
(Inherited from BodyPart) |
Name | Description | |
---|---|---|
Accept |
Dispatches to the specific visit method for this MIME body part.
(Overrides BodyPartAccept(BodyPartVisitor)) | |
Encode |
Encodes the BodyPart into the StringBuilder.
(Overrides BodyPartEncode(StringBuilder)) | |
Equals | (Inherited from Object) | |
Finalize | (Inherited from Object) | |
GetHashCode | (Inherited from Object) | |
GetType | (Inherited from Object) | |
MemberwiseClone | (Inherited from Object) | |
ToString |
Returns a String that represents the current BodyPart.
(Inherited from BodyPart) |
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); } }