У меня есть электронное письмо, созданное C# с использованием Outlook Interop, но мне нужно использовать RTFBody, поскольку он отформатирован в RTF, а не HTMLBody, где я вижу все примеры возможности добавлять туда подписи.
Я пытаюсь сделать что-то подобное, но у меня это не работает. Есть какие-нибудь советы, как заставить это работать в Outlook 2016?
MyOutlook.Mailitem oMailItem =(MyOutlook.MailItem)oApp.CreateItem(MyOutlook.olItemType.olMailItem);
oMailItem.Display(oMailItem); //create the empty mail item
oMailItem.To = emailform.ToMain;
oMailItem.CC = ccStrings;
oMailItem.BCC = emailForm.BCC;
oMailItem.Subject = emailForm.Subject;
oMailItem.RTFBody = GetRTBText(); //function to get RTF byte array
private byte[] GetRTBText() {
Clipboard.Clear();
RTBBody.SelectAll();
RTBBody.Copy();
return Encoding.UTF8.GetBytes(Clipboard.GetText(TextDataFormat.Rtf));
}
ОБНОВИТЬ:
Похоже, что я могу получить подпись для отображения, когда проделываю аналогичный трюк с oMail.HTMLBody с помощью omail.RTFBody и что-то объединяю с ним. Проблема в том, что исходный элемент не отображается, потому что он говорит, что вы не можете добавить byte []. Мне либо нужно переопределить оператор + для этого экземпляра, либо выяснить, как добавить к нему пустой байт arr ...
Итак, я попытался объединить возвращаемый байтовый массив с пустым байтовым массивом. Вызывает исключение нехватки памяти. Я пытался объединить с самим элементом электронной почты oMailItem.RTFBody, та же проблема ...
не уверен, что еще делать ... когда я это делаю, даже если это вызывает ошибку, появляется подпись, а не тело письма.
Электронное письмо открывается, и все заполняется, но подпись не появляется.
Можно ли посмотреть, что делает GetRTBText()
?
@MartinParkin Да, я разместил для него код ... в основном он просто кодирует данные из текстового поля Rich Text Box в байтовый массив и возвращает его.
Возможно, это глупый вопрос, но вы устанавливаете формат почты в RTF? oMailItem.BodyFormat = olFormatRichText
Я не ... Должен ли я быть? @MartinParkin Я добавил его, но без разницы.
Вы можете прочитать тело RTF в скрытом элементе управления RTF, загрузить данные файла подписи RTF, а затем вставить их в элемент управления RTF - для этого я использовал сообщения Windows API EM_EXSETSEL
/ EM_STREAMIN
(SF_RTF | SFF_SELECTION
). Затем вы можете передать полученный RTF-файл.
Хорошо, я придумал обходной способ сделать это, отобразив электронное письмо, чтобы отобразилась подпись, затем взял HTMLBody mailItem и поместил его в экземпляр документа веб-браузера, а затем скопировал и вставил его в поле Rich Text и затем кодирование текста поля форматированного текста в массив байтов в RTFBody.
Он работает, чтобы поместить туда правильную информацию, но без правильных шрифтов и цветов. Если есть другой способ использовать вместо этого фактическое HTMLBody, я хотел бы знать, как ...
Когда вы говорите, что это не работает, вы получаете сообщение об ошибке или что-то еще происходит?