// // BodyPartBasic.cs // // Author: Jeffrey Stedfast // // Copyright (c) 2013-2020 .NET Foundation and Contributors // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // using System; using System.Text; using MimeKit; namespace MailKit { /// /// A basic message body part. /// /// /// Represents any message body part that is not a multipart, /// message/rfc822 part, or a text part. /// /// /// /// public class BodyPartBasic : BodyPart { /// /// Initializes a new instance of the class. /// /// /// Creates a new . /// public BodyPartBasic () { } /// /// Gets the Content-Id of the body part, if available. /// /// /// Gets the Content-Id of the body part, if available. /// /// The content identifier. public string ContentId { get; set; } /// /// Gets the Content-Description of the body part, if available. /// /// /// Gets the Content-Description of the body part, if available. /// /// The content description. public string ContentDescription { get; set; } /// /// Gets the Content-Transfer-Encoding of the body part. /// /// /// Gets the Content-Transfer-Encoding of the body part. /// Hint: Use the MimeUtils.TryParse /// method to parse this value into a usable . /// /// The content transfer encoding. public string ContentTransferEncoding { get; set; } /// /// Gets the size of the body part, in bytes. /// /// /// Gets the size of the body part, in bytes. /// /// The number of octets. public uint Octets { get; set; } /// /// Gets the MD5 hash of the content, if available. /// /// /// Gets the MD5 hash of the content, if available. /// /// The content md5. public string ContentMd5 { get; set; } /// /// Gets the Content-Disposition of the body part, if available. /// /// /// Gets the Content-Disposition of the body part, if available. /// The Content-Disposition value is only retrieved if the /// flag is used when fetching /// summary information from an . /// /// The content disposition. public ContentDisposition ContentDisposition { get; set; } /// /// Gets the Content-Language of the body part, if available. /// /// /// Gets the Content-Language of the body part, if available. /// The Content-Language value is only retrieved if the /// flag is used when fetching /// summary information from an . /// /// The content language. public string[] ContentLanguage { get; set; } /// /// Gets the Content-Location of the body part, if available. /// /// /// Gets the Content-Location of the body part, if available. /// The Content-Location value is only retrieved if the /// flag is used when fetching /// summary information from an . /// /// The content location. public Uri ContentLocation { get; set; } /// /// Determines whether or not the body part is an attachment. /// /// /// Determines whether or not the body part is an attachment based on the value of /// the Content-Disposition. /// Since the value of the Content-Disposition header is needed, it /// is necessary to include the flag when /// fetching summary information from an . /// /// true if this part is an attachment; otherwise, false. public bool IsAttachment { get { return ContentDisposition != null && ContentDisposition.IsAttachment; } } /// /// Get the name of the file. /// /// /// First checks for the "filename" parameter on the Content-Disposition header. If /// that does not exist, then the "name" parameter on the Content-Type header is used. /// Since the value of the Content-Disposition header is needed, it is /// necessary to include the flag when /// fetching summary information from an . /// /// The name of the file. public string FileName { get { string filename = null; if (ContentDisposition != null) filename = ContentDisposition.FileName; if (filename == null) filename = ContentType.Name; return filename != null ? filename.Trim () : null; } } /// /// Dispatches to the specific visit method for this MIME body part. /// /// /// This default implementation for nodes /// calls . Override this /// method to call into a more specific method on a derived visitor class /// of the class. However, it should still /// support unknown visitors by calling /// . /// /// The visitor. /// /// is null. /// public override void Accept (BodyPartVisitor visitor) { if (visitor == null) throw new ArgumentNullException (nameof (visitor)); visitor.VisitBodyPartBasic (this); } /// /// Encodes the into the . /// /// /// Encodes the into the . /// /// The string builder. protected override void Encode (StringBuilder builder) { Encode (builder, ContentType); builder.Append (' '); Encode (builder, ContentId); builder.Append (' '); Encode (builder, ContentDescription); builder.Append (' '); Encode (builder, ContentTransferEncoding); builder.Append (' '); Encode (builder, Octets); builder.Append (' '); Encode (builder, ContentMd5); builder.Append (' '); Encode (builder, ContentDisposition); builder.Append (' '); Encode (builder, ContentLanguage); builder.Append (' '); Encode (builder, ContentLocation); } } }