Body |
public class BodyPartText : BodyPartBasic
The BodyPartText type exposes the following members.
Name | Description | |
---|---|---|
BodyPartText | Initializes a new instance of the BodyPartText class. |
Name | Description | |
---|---|---|
ContentDescription |
Gets the Content-Description of the body part, if available.
(Inherited from BodyPartBasic) | |
ContentDisposition |
Gets the Content-Disposition of the body part, if available.
(Inherited from BodyPartBasic) | |
ContentId |
Gets the Content-Id of the body part, if available.
(Inherited from BodyPartBasic) | |
ContentLanguage |
Gets the Content-Language of the body part, if available.
(Inherited from BodyPartBasic) | |
ContentLocation |
Gets the Content-Location of the body part, if available.
(Inherited from BodyPartBasic) | |
ContentMd5 |
Gets the MD5 hash of the content, if available.
(Inherited from BodyPartBasic) | |
ContentTransferEncoding |
Gets the Content-Transfer-Encoding of the body part.
(Inherited from BodyPartBasic) | |
ContentType |
Gets the Content-Type of the body part.
(Inherited from BodyPart) | |
FileName |
Get the name of the file.
(Inherited from BodyPartBasic) | |
IsAttachment |
Determines whether or not the body part is an attachment.
(Inherited from BodyPartBasic) | |
IsHtml | Gets whether or not this text part contains HTML. | |
IsPlain | Gets whether or not this text part contains plain text. | |
Lines | Gets the length of the text, in lines. | |
Octets |
Gets the size of the body part, in bytes.
(Inherited from BodyPartBasic) | |
PartSpecifier |
Gets the part specifier.
(Inherited from BodyPart) |
Name | Description | |
---|---|---|
Accept |
Dispatches to the specific visit method for this MIME body part.
(Overrides BodyPartBasicAccept(BodyPartVisitor)) | |
Encode |
Encodes the BodyPart into the StringBuilder.
(Overrides BodyPartBasicEncode(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); } }