检索AlternateView的电子邮件

Dou*_*son 7 html c# email pop3 plaintext

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

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

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

Joh*_*ter 12

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));
Run Code Online (Sandbox Code Playgroud)


mig*_*wty 8

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

    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));
    }
Run Code Online (Sandbox Code Playgroud)


hea*_*arn 1

无法立即使用 System.Net.Mail 命名空间中可用的类来解析电子邮件;您要么需要创建自己的 MIME 解析器,要么使用第三方库。

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

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

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

希望这可以帮助!