public static MimeMessage Load (ParserOptions options, Stream stream, bool persistent,
CancellationToken cancellationToken = default (CancellationToken))
{
if (options == null)
throw new ArgumentNullException (nameof (options));
if (stream == null)
throw new ArgumentNullException (nameof (stream));
var parser = new MimeParser (options, stream, MimeFormat.Entity, persistent);
return parser.ParseMessage (cancellationToken);
}
该方法从指定的流加载MimeMessage,具有6个方法重载。该方法返回一个MimeMessage对象,有源码可以看出,在该方法内部创建了一个MimeParser对象,MimeParser包含内容(例如邮件正文文本或附件)的叶节点MIME部分。调用ParseMessage方法,解析来自流的消息。
2.TextPart.Text:
public string Text { get { if (ContentObject == null) return string.Empty; ]; using (var memory = new MemoryStream ()) { ContentObject.DecodeTo (memory); var content = memory.ToArray (); Encoding encoding = null; if (charset != null) { try { encoding = CharsetUtils.GetEncoding (charset); } catch (NotSupportedException) { } } if (encoding == null) { try { return CharsetUtils.UTF8.GetString (content, 0, (int) memory.Length); } catch (DecoderFallbackException) { encoding = CharsetUtils.Latin1; } } return encoding.GetString (content, 0, (int) memory.Length); } } set { SetText (Encoding.UTF8, value); } }
该属性获取解码的文本内容。该属性是一个可读可写的属性。ContentType.Parameters["charset"]用于获取charset参数的值。该方法用来将参数的值设置为数据流并设置对应的编码。看到这里的异常处理结构,就想简单的谈几句,.NET的异常比较的薄弱,很多时候在写.NET的异常时就更加的简单,以上是对异常知识捕获,有些地方并没有做处理,有些地方是对异常的地方进行恢复。
3.MimeEntity.WriteTo():
WriteTo (FormatOptions options, Stream stream, bool contentOnly,
CancellationToken cancellationToken = default (CancellationToken))
{
if (options == null)
throw new ArgumentNullException (nameof (options));
if (stream == null)
throw new ArgumentNullException (nameof (stream));
if (!contentOnly)
Headers.WriteTo (options, stream, cancellationToken);
}
该方法将MimeEntity写入到指定的数据流中,该方法接受参数options格式选项。stream输出数据流,contentOnly判断是否可写。该方法定义为虚方法,在继承此方法后,可以在子类种对该方法进行重写。
四.总结本人觉得在项目开发中,如果引入了第三方组件,我们尽量引入组件的源码,这样我们对整个组件的结构有一个认识,组件的实现方式我们也可以进行细致了解,尤其是我们在进行调试的事后更加有用,我们可以逐一的进行断点调试。以上是对该组件的一个简单介绍,有兴趣的可以去深入的了解和学习。