2013-03-05 4 views
2

У меня был некоторый успех, кодирующий RTF-объект из MailItem с использованием UTF8Encoding. Я могу составить новое электронное письмо, сделать все новое письмо и отправить по электронной почте. При нажатии send, я добавляю сообщение с тегом, который также добавляется в категории. Все это работает и через RTFBbody.Редактирование MailItem.RTFBody через кодирование

Проблема возникает, когда я отвечаю на электронные письма 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");

Like Я сказал: Это работает, когда я создаю новое электронное письмо и отправляю его, но не тогда, когда я пытаюсь ответить на тот же адрес электронной почты. Также кажется, что размер byte[] почти удваивается после удаления. Когда я проверяю его во время удаления, он составляет около 15k байт, и когда я проверяю во время добавления, он переходит на более чем 30k байт. Когда я пытаюсь добавить вновь накачанный byte[] в rtfBody, я получаю сообщение об ошибке.

Спасибо за любую помощь и советы и извините за все чтение.

ответ

1

У меня была такая же проблема, и я столкнулся с тем, что, по моему мнению, является более простым способом заменить текст в внешнем тесте rtf с помощью объектной модели Word.Document. Вам нужно будет сначала добавить ссылку 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 
} 
+0

Да, я в конечном итоге с помощью WordEditor, а также. Редактирование RTF было слишком большой головной болью. – Natzely