使用C#编辑Outlook.MailItem RTFBody

时间:2011-02-10 23:53:27

标签: c# outlook rtf

我试图将字符串附加到外发的Outlook.MailItem。在发送事件处理程序中,我有:

switch (mailItem.BodyFormat) {
    case Outlook.OlBodyFormat.olFormatRichText:
        byte[] mailItemBytes = mailItem.RTFBody as byte[];
        System.Text.Encoding encoding = new System.Text.ASCIIEncoding();
        string RTF = encoding.GetString(mailItemBytes);
        RTF += "my string";
        byte[] moreMailItemBytes = encoding.GetBytes(RTF);
        mailItem.RTFBody = moreMailItemBytes;
        break;
    // ...
}

但收到的电子邮件不包含我的字符串。

2 个答案:

答案 0 :(得分:0)

RTF是一种非常复杂的文件格式,并不像连接字符串那么容易。您可以尝试使用RichTextBox控件并首先在其中导入数据,向其中添加文本,然后重新获取格式化的值。有点笨重,但比解析RTF文件容易得多。

作为替代方案,您可能能够找到一个解析和使用RTF的库,但这意味着您的应用程序的依赖关系,并且很可能是另一个DLL包含在该版本中。

答案 1 :(得分:0)

我知道这已经过时了并且已经进行了绿色检查但是在搜索了类似问题后,我发现了一个页面,它为如何使用Word.Document对象模型修改Outlook项目中的RTF主体提供了一个很好的答案。 https://www.add-in-express.com/forum/read.php?FID=5&TID=12738

基本上,您将文本视为单词doc,而忘记了一起使用RTF。您需要首先在项目中添加Microsoft.Office.Interop.Word的引用。

然后将使用添加到您的项目

using Word = Microsoft.Office.Interop.Word;

然后添加您的代码

Word.Document doc = Inspector.WordEditor as Word.Document;

//text body
string text = doc.Content.Text;

//end of file
int endOfFile = (text.Length) > 0 ? text.Length - 1 : 0; 

//Select the point to add or modify text
Word.Range myRange = doc.Range(endOfFile, endOfFile);

//add your text to end of file
myRange.InsertAfter("my string");