6

MS Exchange / Outlookメッセージは、MAPIを使用してデータを保存します。1つの一般的なMAPIプロパティには、メッセージの本文のリッチテキストバージョン(0x1009、PR_RTF_COMPRESSED、PidTagRtfCompressed)が含まれています。リッチテキスト文字列の構造が無効な場合、Outlook2003以前では本文のコンテンツを表示できません。

たとえば、このRTFコードでは、終了の「}」が省略されています。

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 asdfasdf\par

正しいバージョンは

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 asdfasdf\par
}

RTFコードが有効かどうかをテストするために使用できる.NETメソッドまたはライブラリはありますか?そうでない場合は、C++およびJavaまたはCOMライブラリを使用できます。そうでない場合、RTF文字列の不規則性を報告するアプリケーションはありますか?

理想的な解決策は、不規則性を含む行番号を報告することです。適切な解決策は、RTFが全体として有効であり、整形式であるかどうかを報告します。

この問題は、MAPIの外部に関連しています。たとえば、上記で指定した無効なRTF文字列が.RTFファイルに書き込まれると、ワードパッド5.1で正しく開きますが、Word 2007はエラーを報告し、ファイルの修復を要求します。


1つの提案は、RTFをリッチテキストボックスにストリーミングすることでした。私はこのコードを試しました:

private void button1_Click(object sender, EventArgs e)
        {
            string aaa = richTextBox1.Rtf;
            richTextBox1.Rtf = @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 asdfasdf\par}";
            richTextBox1.Refresh();
        }

richTextBox1.Rtfが「}」で終わるかどうかに関係なく、リッチテキストボックスにはこれがコンテンツとして表示されます:asdfasdf

私が探している解決策は、最後の「}」を省略するとエラーを報告します。

4

1 に答える 1

2

RTFを非表示のRTFコントロールにロードしてから、ストリーミングしてみませんか?無効なRTFを正確に設定するものは何ですか?Outlookがそうすることはないと思います。

于 2012-10-01T21:56:54.690 に答える