【问题标题】:exception in setting Outlook.MailItem.body as rich text将 Outlook.MailItem.body 设置为富文本时出现异常
【发布时间】:2026-01-28 20:55:01
【问题描述】:

我有一个用于消息正文的 RichTextBox 我需要用富文本的正文创建一个新邮件。 有我的代码我是如何试图意识到这一点的:

MemoryStream ms = new MemoryStream();
MemoEditBody.SaveDocument(ms, DevExpress.XtraRichEdit.DocumentFormat.Rtf);
byte[] RTFBody = ms.ToArray();
email.oMsg.RTFBody = RTFBody;                                

类型:

OutlookEMail email;
public MailItem oMsg;

问题: 使用 2010 Outlook - 正常工作; 使用 2007 Outlook - 此代码引发异常 (AccessViolationException: Attempted to read or write protected memory) 有人可以建议如何使用 2007 Outlook 解决此问题吗?

附:使用 : 视觉工作室 2010 开发快递

在两台计算机上测试,它们几乎相同(相同的窗口,相同的框架,只有一台装有 Outlook 2007 另一台装有 2010),因此 80% 的问题出在 Outlook 版本中。 p>

【问题讨论】:

    标签: c# email outlook devexpress rtf


    【解决方案1】:

    我不确定您是否设法解决了您的问题,但我遇到了同样的问题。我正在使用 DevExpress RichEditControl 创建一个邮件合并 RTF 文件,该文件将用作 Outlook MailItem 的 RtfBody。但是,我得到了相同的 AccessViolationException。

    我的解决方法不是最优雅的,是使用这种方法将 RTF 转换为 HTML:

    http://www.codeproject.com/Articles/51879/Converting-RTF-to-HTML-in-VB-NET-the-Easy-Way

    然后只需将消息 .BodyFormat 设置为 olFormatHTML 并将 .HTMLBody 设置为上述函数返回的字符串。

    【讨论】:

    • 您对嵌入的图像有任何想法吗?进入 html 文本的所有路径都是本地的,因此不会显示。
    【解决方案2】:

    原因是 MailItem.RTFBody 属性仅在 Outlook 2010 中添加,因此您试图调用不存在的东西。

    据我所知,有两种潜在的解决方法。

    1. 如果 Outlook 使用 Word 作为编辑器,您可以使用以下方法提取邮件正文:

      Word.Document doc = app.ActiveInspector.WordEditor as Word.Document;
      

      ...然后您可以使用几乎任何 Word 对象模型来编辑/提取文本(例如 doc.SaveAs(...) 来保存它)。

      请注意,WordEditor 属性仅在IsWordMail 方法返回true 并且EditorType 属性为olEditorWord 时才有效(请参阅http://msdn.microsoft.com/en-us/library/office/ff868196.aspx)。

    2. 您可以按照 Foub 上面所说的先将正文转换为 HTML,但这可能会丢失格式。

    这两种解决方案都不是完美的,但根据我的经验,上述方法的组合大多数时候都有效。

    【讨论】: