![]() | TextPart Class |
Namespace: MimeKit
public class TextPart : MimePart
The TextPart type exposes the following members.
Name | Description | |
---|---|---|
![]() | TextPart |
Initialize a new instance of the TextPart
class with a Content-Type of text/plain.
|
![]() | TextPart(MimeEntityConstructorArgs) |
Initialize a new instance of the TextPart class.
|
![]() | TextPart(String) |
Initialize a new instance of the TextPart
class with the specified text subtype.
|
![]() | TextPart(TextFormat) |
Initialize a new instance of the TextPart
class with the specified text format.
|
![]() | TextPart(String, Object) |
Initialize a new instance of the TextPart
class with the specified text subtype.
|
Name | Description | |
---|---|---|
![]() ![]() | Content |
Gets or sets the MIME content.
(Inherited from MimePart.) |
![]() | ContentBase |
Gets or sets the base content URI.
(Inherited from MimeEntity.) |
![]() | ContentDescription |
Gets or sets the description of the content if available.
(Inherited from MimePart.) |
![]() | ContentDisposition |
Gets or sets the content disposition.
(Inherited from MimeEntity.) |
![]() | ContentDuration |
Gets or sets the duration of the content if available.
(Inherited from MimePart.) |
![]() | ContentId |
Gets or sets the content identifier.
(Inherited from MimeEntity.) |
![]() | ContentLocation |
Gets or sets the content location.
(Inherited from MimeEntity.) |
![]() | ContentMd5 |
Gets or sets the md5sum of the content.
(Inherited from MimePart.) |
![]() | ContentTransferEncoding |
Gets or sets the content transfer encoding.
(Inherited from MimePart.) |
![]() | ContentType |
Gets the type of the content.
(Inherited from MimeEntity.) |
![]() ![]() | FileName |
Gets or sets the name of the file.
(Inherited from MimePart.) |
![]() | Format |
Get the text format of the content.
|
![]() | Headers |
Gets the list of headers.
(Inherited from MimeEntity.) |
![]() | IsAttachment |
Gets a value indicating whether this MimePart is an attachment.
(Inherited from MimeEntity.) |
![]() | IsEnriched |
Gets whether or not this text part contains enriched text.
|
![]() ![]() | IsFlowed |
Gets whether or not this text part contains flowed text.
|
![]() ![]() | IsHtml |
Gets whether or not this text part contains HTML.
|
![]() | IsPlain |
Gets whether or not this text part contains plain text.
|
![]() | IsRichText |
Gets whether or not this text part contains RTF.
|
![]() | Text |
Get the decoded text content.
|
Name | Description | |
---|---|---|
![]() | Accept |
Dispatches to the specific visit method for this MIME entity.
(Overrides MimePartAccept(MimeVisitor).) |
![]() | ComputeContentMd5 |
Computes the MD5 checksum of the content.
(Inherited from MimePart.) |
![]() | Dispose |
Releases all resources used by the MimeEntity object.
(Inherited from MimeEntity.) |
![]() | Dispose(Boolean) |
Releases the unmanaged resources used by the MimePart and
optionally releases the managed resources.
(Inherited from MimePart.) |
![]() | Equals | Determines whether the specified object is equal to the current object. (Inherited from Object.) |
![]() | Finalize |
Releases unmanaged resources and performs other cleanup operations before the
MimeEntity is reclaimed by garbage collection.
(Inherited from MimeEntity.) |
![]() | GetBestEncoding(EncodingConstraint, CancellationToken) |
Calculates the most efficient content encoding given the specified constraint.
(Inherited from MimePart.) |
![]() | GetBestEncoding(EncodingConstraint, Int32, CancellationToken) |
Calculates the most efficient content encoding given the specified constraint.
(Inherited from MimePart.) |
![]() | GetHashCode | Serves as the default hash function. (Inherited from Object.) |
![]() | GetText(Encoding) |
Gets the decoded text content using the provided charset encoding to
override the charset specified in the Content-Type parameters.
|
![]() | GetText(Encoding) |
Get the decoded text and the encoding used to convert it into unicode.
|
![]() | GetText(String) |
Gets the decoded text content using the provided charset to override
the charset specified in the Content-Type parameters.
|
![]() | GetType | Gets the Type of the current instance. (Inherited from Object.) |
![]() | MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) |
![]() | OnHeadersChanged |
Called when the headers change in some way.
(Inherited from MimePart.) |
![]() | Prepare |
Prepare the MIME entity for transport using the specified encoding constraints.
(Inherited from MimePart.) |
![]() | RemoveHeader |
Remove a header by name.
(Inherited from MimeEntity.) |
![]() | SetHeader(String, Byte) |
Set the value of a header using the raw value.
(Inherited from MimeEntity.) |
![]() | SetHeader(String, String) |
Set the value of a header.
(Inherited from MimeEntity.) |
![]() | SetText(Encoding, String) |
Sets the text content and the charset parameter in the Content-Type header.
|
![]() | SetText(String, String) |
Sets the text content and the charset parameter in the Content-Type header.
|
![]() | ToString |
Returns a String that represents the MimeEntity for debugging purposes.
(Inherited from MimeEntity.) |
![]() | TryInit |
Tries to use the given object to initialize the appropriate property.
(Inherited from MimeEntity.) |
![]() | VerifyContentMd5 |
Verifies the Content-Md5 value against an independently computed md5sum.
(Inherited from MimePart.) |
![]() | WriteTo(Stream, CancellationToken) |
Write the MimeEntity to the specified output stream.
(Inherited from MimeEntity.) |
![]() | WriteTo(String, CancellationToken) |
Write the MimeEntity to the specified file.
(Inherited from MimeEntity.) |
![]() | WriteTo(FormatOptions, Stream, CancellationToken) |
Write the MimeEntity to the specified output stream.
(Inherited from MimeEntity.) |
![]() | WriteTo(FormatOptions, String, CancellationToken) |
Write the MimeEntity to the specified file.
(Inherited from MimeEntity.) |
![]() | WriteTo(Stream, Boolean, CancellationToken) |
Write the MimeEntity to the specified output stream.
(Inherited from MimeEntity.) |
![]() | WriteTo(String, Boolean, CancellationToken) |
Write the MimeEntity to the specified file.
(Inherited from MimeEntity.) |
![]() | WriteTo(FormatOptions, String, Boolean, CancellationToken) |
Write the MimeEntity to the specified file.
(Inherited from MimeEntity.) |
![]() | WriteTo(FormatOptions, Stream, Boolean, CancellationToken) |
Write the MimePart to the specified output stream.
(Inherited from MimePart.) |
![]() | WriteToAsync(Stream, CancellationToken) |
Asynchronously write the MimeEntity to the specified output stream.
(Inherited from MimeEntity.) |
![]() | WriteToAsync(String, CancellationToken) |
Asynchronously write the MimeEntity to the specified file.
(Inherited from MimeEntity.) |
![]() | WriteToAsync(FormatOptions, Stream, CancellationToken) |
Asynchronously write the MimeEntity to the specified output stream.
(Inherited from MimeEntity.) |
![]() | WriteToAsync(FormatOptions, String, CancellationToken) |
Asynchronously write the MimeEntity to the specified file.
(Inherited from MimeEntity.) |
![]() | WriteToAsync(Stream, Boolean, CancellationToken) |
Asynchronously write the MimeEntity to the specified output stream.
(Inherited from MimeEntity.) |
![]() | WriteToAsync(String, Boolean, CancellationToken) |
Asynchronously write the MimeEntity to the specified file.
(Inherited from MimeEntity.) |
![]() | WriteToAsync(FormatOptions, String, Boolean, CancellationToken) |
Asynchronously write the MimeEntity to the specified file.
(Inherited from MimeEntity.) |
![]() | WriteToAsync(FormatOptions, Stream, Boolean, CancellationToken) |
Asynchronously write the MimePart to the specified output stream.
(Inherited from MimePart.) |
Unless overridden, all textual parts parsed by the MimeParser, such as text/plain or text/html, will be represented by a TextPart.
For more information about text media types, see section 4.1 of rfc2046.
/// <summary> /// Visits a MimeMessage and generates HTML suitable to be rendered by a browser control. /// </summary> class HtmlPreviewVisitor : MimeVisitor { List<MultipartRelated> stack = new List<MultipartRelated> (); List<MimeEntity> attachments = new List<MimeEntity> (); readonly string tempDir; string body; /// <summary> /// Creates a new HtmlPreviewVisitor. /// </summary> /// <param name="tempDirectory">A temporary directory used for storing image files.</param> public HtmlPreviewVisitor (string tempDirectory) { tempDir = tempDirectory; } /// <summary> /// The list of attachments that were in the MimeMessage. /// </summary> public IList<MimeEntity> Attachments { get { return attachments; } } /// <summary> /// The HTML string that can be set on the BrowserControl. /// </summary> public string HtmlBody { get { return body ?? string.Empty; } } protected override void VisitMultipartAlternative (MultipartAlternative alternative) { // walk the multipart/alternative children backwards from greatest level of faithfulness to the least faithful for (int i = alternative.Count - 1; i >= 0 && body == null; i--) alternative[i].Accept (this); } protected override void VisitMultipartRelated (MultipartRelated related) { var root = related.Root; // push this multipart/related onto our stack stack.Add (related); // visit the root document root.Accept (this); // pop this multipart/related off our stack stack.RemoveAt (stack.Count - 1); } // look up the image based on the img src url within our multipart/related stack bool TryGetImage (string url, out MimePart image) { UriKind kind; int index; Uri uri; if (Uri.IsWellFormedUriString (url, UriKind.Absolute)) kind = UriKind.Absolute; else if (Uri.IsWellFormedUriString (url, UriKind.Relative)) kind = UriKind.Relative; else kind = UriKind.RelativeOrAbsolute; try { uri = new Uri (url, kind); } catch { image = null; return false; } for (int i = stack.Count - 1; i >= 0; i--) { if ((index = stack[i].IndexOf (uri)) == -1) continue; image = stack[i][index] as MimePart; return image != null; } image = null; return false; } // Save the image to our temp directory and return a "file://" url suitable for // the browser control to load. // Note: if you'd rather embed the image data into the HTML, you can construct a // "data:" url instead. string SaveImage (MimePart image, string url) { string fileName = url.Replace (':', '_').Replace ('\\', '_').Replace ('/', '_'); string path = Path.Combine (tempDir, fileName); if (!File.Exists (path)) { using (var output = File.Create (path)) image.Content.DecodeTo (output); } return "file://" + path.Replace ('\\', '/'); } // Replaces <img src=...> urls that refer to images embedded within the message with // "file://" urls that the browser control will actually be able to load. void HtmlTagCallback (HtmlTagContext ctx, HtmlWriter htmlWriter) { if (ctx.TagId == HtmlTagId.Image && !ctx.IsEndTag && stack.Count > 0) { ctx.WriteTag (htmlWriter, false); // replace the src attribute with a file:// URL foreach (var attribute in ctx.Attributes) { if (attribute.Id == HtmlAttributeId.Src) { MimePart image; string url; if (!TryGetImage (attribute.Value, out image)) { htmlWriter.WriteAttribute (attribute); continue; } url = SaveImage (image, attribute.Value); htmlWriter.WriteAttributeName (attribute.Name); htmlWriter.WriteAttributeValue (url); } else { htmlWriter.WriteAttribute (attribute); } } } else if (ctx.TagId == HtmlTagId.Body && !ctx.IsEndTag) { ctx.WriteTag (htmlWriter, false); // add and/or replace oncontextmenu="return false;" foreach (var attribute in ctx.Attributes) { if (attribute.Name.ToLowerInvariant () == "oncontextmenu") continue; htmlWriter.WriteAttribute (attribute); } htmlWriter.WriteAttribute ("oncontextmenu", "return false;"); } else { // pass the tag through to the output ctx.WriteTag (htmlWriter, true); } } protected override void VisitTextPart (TextPart entity) { TextConverter converter; if (body != null) { // since we've already found the body, treat this as an attachment attachments.Add (entity); return; } if (entity.IsHtml) { converter = new HtmlToHtml { HtmlTagCallback = HtmlTagCallback }; } else if (entity.IsFlowed) { var flowed = new FlowedToHtml (); string delsp; if (entity.ContentType.Parameters.TryGetValue ("delsp", out delsp)) flowed.DeleteSpace = delsp.ToLowerInvariant () == "yes"; converter = flowed; } else { converter = new TextToHtml (); } body = converter.Convert (entity.Text); } protected override void VisitTnefPart (TnefPart entity) { // extract any attachments in the MS-TNEF part attachments.AddRange (entity.ExtractAttachments ()); } protected override void VisitMessagePart (MessagePart entity) { // treat message/rfc822 parts as attachments attachments.Add (entity); } protected override void VisitMimePart (MimePart entity) { // realistically, if we've gotten this far, then we can treat this as an attachment // even if the IsAttachment property is false. attachments.Add (entity); } }