2

我已经使用 UTF8Encoding 从 MailItem 编码 RTFbody 取得了一些成功。我能够撰写新电子邮件,完成所有新电子邮件的工作,然后单击发送。点击发送后,我在电子邮件中附加了一个标签,该标签也添加到了类别中。这一切都通过 RTFBbody 工作。

当我回复 RTF 电子邮件时,问题就出现了,出于测试目的,这些电子邮件只是我发送给孤独的自己的电子邮件。当我发送回复电子邮件并添加新标签时,我先删除旧标签,然后添加新标签。当我RTFBody在回复电子邮件中设置包含新标签的已编辑字符串时,我收到“内存或磁盘空间不足”错误。当我只是删除具有相同功能的标签时,不会发生这种情况。

贝娄是我正在使用的代码:

private void ChangeRTFBody(string replaceThis, string replaceWith)
{
    byte[] rtfBytes = Globals.ThisAddIn.email.RTFBody as byte[];
    System.Text.Encoding encoding = new System.Text.UTF8Encoding();
    string rtfString = encoding.GetString(rtfBytes);

    rtfString = rtfString.Replace(replaceThis, replaceWith);

    rtfBytes = encoding.GetBytes(rtfString);
    Globals.ThisAddIn.email.RTFBody = rtfBytes; < // The error is here only on 
                                                  // reply and only when I replace 
                                                  // with new tags
}

这些是我打的电话:

删除旧标签:ChangeRTFBody(lastTag, "");

添加新标签:ChangeRTFBody("}}\0", newTag + "}}\0");

就像我说的,这在我创建新电子邮件并发送时有效,但在我尝试回复同一封电子邮件时无效。似乎byte[]删除后的大小几乎翻了一番。当我在删除期间检查它时,它大约为 15k 字节,而当我在添加期间检查时,它跳到超过 30k 字节。当我尝试将新膨胀的内容添加byte[]到 rtfBody 时,我得到了错误。

感谢您提供任何帮助和提示,并对所有阅读内容感到抱歉。

4

1 回答 1

1

我遇到了同样的问题,并且遇到了我认为通过使用 Word.Document 对象模型替换 Outlook rtf 正文中的文本的更简单方法。您需要先将 Microsoft.Office.Interop.Word 的引用添加到您的项目中。

然后添加使用

using Word = Microsoft.Office.Interop.Word;

那么你的代码看起来像

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

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

//find text location
int textLocation = text.IndexOf(replaceThis);

if(textLocation > -1){
     //get range
     int textLocationEnd = textLocation + replaceThis.Length;

     //init range
     Word.Range myRange = doc.Range(textLocation , textLocationEnd);

     //replace text
     myRange.Text = replaceWith
}
于 2017-04-14T22:35:09.170 回答