Click or drag to resize
MimeKit

BodyPartBasic Class

A basic message body part.
Inheritance Hierarchy
SystemObject
  MailKitBodyPart
    MailKitBodyPartBasic
      MailKitBodyPartMessage
      MailKitBodyPartText

Namespace: MailKit
Assembly: MailKit (in MailKit.dll) Version: 4.3.0
Syntax
C#
public class BodyPartBasic : BodyPart

The BodyPartBasic type exposes the following members.

Constructors
 NameDescription
Public methodBodyPartBasic Initializes a new instance of the BodyPartBasic class.
Top
Properties
 NameDescription
Public propertyContentDescription Gets the Content-Description of the body part, if available.
Public propertyContentDisposition Gets the Content-Disposition of the body part, if available.
Public propertyContentId Gets the Content-Id of the body part, if available.
Public propertyContentLanguage Gets the Content-Language of the body part, if available.
Public propertyContentLocation Gets the Content-Location of the body part, if available.
Public propertyContentMd5 Gets the MD5 hash of the content, if available.
Public propertyContentTransferEncoding Gets the Content-Transfer-Encoding of the body part.
Public propertyContentType Gets the Content-Type of the body part.
(Inherited from BodyPart)
Public propertyFileName Get the name of the file.
Public propertyIsAttachment Determines whether or not the body part is an attachment.
Public propertyOctets Gets the size of the body part, in bytes.
Public propertyCode examplePartSpecifier Gets the part specifier.
(Inherited from BodyPart)
Top
Methods
 NameDescription
Public methodAccept Dispatches to the specific visit method for this MIME body part.
(Overrides BodyPartAccept(BodyPartVisitor))
Protected methodEncode Encodes the BodyPart into the StringBuilder.
(Overrides BodyPartEncode(StringBuilder))
Public methodEquals
(Inherited from Object)
Protected methodFinalize
(Inherited from Object)
Public methodGetHashCode
(Inherited from Object)
Public methodGetType
(Inherited from Object)
Protected methodMemberwiseClone
(Inherited from Object)
Public methodToString Returns a String that represents the current BodyPart.
(Inherited from BodyPart)
Top
Remarks
Represents any message body part that is not a multipart, message/rfc822 part, or a text 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.TextBody;

            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);
    }
}
See Also