检索AlternateView的电子邮件

我似乎无法从System.Net.Mail.AlternateView检索AlternateView。

我有一个通过POP3提取电子邮件的应用程序。 我了解如何创建用于发送的备用视图,但是在查看电子邮件时如何选择备用视图。 我已收到的电子邮件作为System.Net.MailMessage对象,所以我可以轻松拉出正文,编码,主题行等。我可以看到AlternateViews,也就是说,我可以看到计数是2但是想要在我请求正文时,提取当前返回的HTML以外的内容。

希望这有一点意义,有人可以对此有所了解。 最后,我想把明文拉出来,而不是HTML,而不想自己解析它。

它不能立即解析具有System.Net.Mail命名空间中可用类的电子邮件; 您需要创建自己的MIME解析器,或使用第三方库。

Peter Huber SG撰写的题为“具有完整MIME支持的POP3电子邮件客户端(.NET 2.0)”的伟大Codeproject文章将帮助您了解如何实现MIME处理以及相关的RFC规范文章。

您可以使用Codeproject文章作为编写自己的解析器的开始,或者评估像SharpMimeTools这样的库,它是一个用于解析和解码MIME电子邮件的开源库。

http://anmar.eu.org/projects/sharpmimetools/

希望这可以帮助!

Mightytighty正在引领你走上正确的道路,但你不应该假设编码的类型。 这应该是诀窍:

var dataStream = view.ContentStream; dataStream.Position = 0; byte[] byteBuffer = new byte[dataStream.Length]; var encoding = Encoding.GetEncoding(view.ContentType.CharSet); string body = encoding.GetString(byteBuffer, 0, dataStream.Read(byteBuffer, 0, byteBuffer.Length)); 

我遇到了同样的问题,但你只需要从流中读取它。 这是一个例子:

  public string ExtractAlternateView() { var message = new System.Net.Mail.MailMessage(); message.Body = "This is the TEXT version"; //Add textBody as an AlternateView message.AlternateViews.Add( System.Net.Mail.AlternateView.CreateAlternateViewFromString( "This is the HTML version", new System.Net.Mime.ContentType("text/html") ) ); var dataStream = message.AlternateViews[0].ContentStream; byte[] byteBuffer = new byte[dataStream.Length]; return System.Text.Encoding.ASCII.GetString(byteBuffer, 0, dataStream.Read(byteBuffer, 0, byteBuffer.Length)); } 

有一种更简单的方法:

 public string GetPlainTextBodyFromMsg(MailMessage msg) { StreamReader plain_text_body_reader = new StreamReader(msg.AlternateViews[0].ContentStream); return(plain_text_body_reader.ReadToEnd()); } 

如果第一个替代视图是纯文本版本,则通常会发生这种情况。