MS Exchange / Outlook 邮件使用 MAPI 存储数据。一个常见的 MAPI 属性包含消息正文的富文本版本(0x1009、PR_RTF_COMPRESSED、PidTagRtfCompressed)。如果富文本字符串的结构无效,则 Outlook 2003 及更早版本无法显示任何正文内容。
例如,此 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 文件,它会在 WordPad 5.1 中正确打开,但 Word 2007 报告错误并请求我修复文件。
一个建议是我将 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
当我省略最后一个“}”时,我正在寻找的解决方案会报告错误。