Я пытаюсь отправить электронные письма в формате HTML с помощью С# 3 через Outlook.MailItem
Outlook.MailItem objMail = (Outlook.MailItem)olkApp.CreateItem(Outlook.OlItemType.olMailItem);
objMail.To = to;
objMail.Subject = subject;
objMail.HTMLBody = htmlBody;
Электронное письмо генерируется извне путем сохранения из элемента управления RTF (текстовый элемент управления TX), который дает HTML со ссылками на изображения, хранящиеся в подкаталоге <<FileName>>
_files. Пример:
<img border="0" src="file:///C:/Documents%20and%20Settings/ItsMe/Local%20Settings/Temp/2/zbt4dmvs_Images/zbt4dmvs_1.png" width="94" height="94" alt="[image]">
Отправка письма таким образом генерирует письмо с неработающими ссылками.
Используя Outlook 2007 в качестве почтового клиента с Word в качестве редактора электронной почты, переключение на RTF (вкладка «Параметры», группа вкладок «Формат») сохраняет макет и встроенные изображения.
Программно сделать это через:
var oldFormat = objMail.BodyFormat;
objMail.BodyFormat = Outlook.OlBodyFormat.olFormatRichText;
objMail.BodyFormat = oldFormat;
теряет форматирование и искажает изображения (изображение становится маркером ссылки [image]
на экране, по которому можно щелкнуть, но изображение больше не отображается). Это неудивительно, учитывая, что документация для свойства MailItem.BodyFormat говорит: «Все форматирование текста будет потеряно при переключении свойства BodyFormat
с RTF на HTML и наоборот».
К сожалению, кажется, что нет простого способа изменить Type
каждого Attachment
в MailItem.Attachements
на OlAttachmentType.olByValue
, так как это свойство доступно только для чтения и устанавливается при создании Attachment
.
Подход, который приходит на ум, состоит в том, чтобы пройтись по HTML, заменив теги
маркерами и программно пройдясь по тексту <img>
MailItem
, вставив Outlook.Attachment
из Type
OlAttachmentType.olByValue
.
Другой вариант — преобразовать ссылки
для использования <img>
и добавить изображения в виде вложений с идентификаторами, на которые они ссылаются.src="cid:uniqueIdN"
Итак, к вопросу ... Есть ли способ преобразовать связанные изображения во встроенные изображения, в идеале, без использования сторонних инструментов, таких как Redemption? Преобразование в RTF приводит к результату, но это ни в коем случае не является предварительным условием и, очевидно, может привести к потере точности - я просто хочу, чтобы это просто работало :D Ни одна из моих существующих идей не кажется мне чистой.