7

System.Net.Mail.AlternateView から AlternateView を取得できないようです。

POP3 経由で電子メールをプルするアプリケーションがあります。送信用の別のビューを作成する方法は理解していますが、メールを見るときに別のビューを選択するにはどうすればよいですか。受信した電子メールを System.Net.MailMessage オブジェクトとして持っているので、本文、エンコーディング、件名などを簡単に引き出すことができます。本文をリクエストしたときに現在返されている HTML 以外のものを抽出します。

これがある程度の意味を持ち、誰かがこれに光を当てることができることを願っています. 最終的に、私は HTML の代わりにプレーンテキストを取り出したいと考えており、自分で解析したくありません。

4

4 に答える 4

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));
于 2011-07-18T17:41:22.967 に答える
9

私は同じ問題を抱えていましたが、ストリームから読み取る必要があります。次に例を示します。

    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));
    }
于 2009-09-25T17:13:56.113 に答える
4

もっと簡単な方法があります:

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

これは、通常どおり、最初の代替ビューがプレーン テキスト バージョンの場合に機能します。

于 2013-11-16T21:57:07.083 に答える
1

System.Net.Mail 名前空間で利用可能なクラスを使用して電子メールを解析することはすぐにはできません。独自の MIME パーサーを作成するか、代わりにサードパーティのライブラリを使用する必要があります。

Peter Huber SG によるこの優れた Codeproject 記事は、「完全な MIME サポートを備えた POP3 電子メール クライアント (.NET 2.0)」というタイトルで、MIME 処理の実装方法と関連する RFC 仕様記事を理解するのに役立ちます。

独自のパーサーを作成するための出発点として Codeproject の記事を使用するか、MIME メールを解析およびデコードするためのオープン ソース ライブラリであるSharpMimeToolsのようなライブラリを評価することができます。

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

お役に立てれば!

于 2008-11-17T19:09:42.840 に答える