Outlook HTML Mail — изменение связанных элементов на встроенные

Я пытаюсь отправить электронные письма в формате 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 Ни одна из моих существующих идей не кажется мне чистой.


person Ruben Bartelink    schedule 02.02.2009    source источник


Ответы (2)


Поскольку вы используете .net > 2.0, вы можете заглянуть в пространство имен System.Net.Mail для создания почтовых сообщений. Я обнаружил, что он вполне настраиваемый и его очень легко использовать для задач, подобных вашей. Единственная проблема, с которой я столкнулся, заключалась в том, чтобы убедиться, что я использую правильный encoding, и мне пришлось использовать таблицы HTML для макетов (css не работал бы правильно). Вот несколько ссылок, чтобы показать вам, как это работает...

Если такой возможности нет, я бы порекомендовал пойти по маршруту Content ID и встроить изображения в виде вложений. Другой вариант — разместить изображения публично на веб-сайте и изменить ссылки на изображения в html на общедоступные изображения.

Что-то, о чем вы должны знать, это то, что электронные письма в формате HTML могут легко выглядеть как спам и могут рассматриваться как таковые почтовыми серверами и клиентами. Даже те, которые предназначены только для внутреннего использования (это случилось со мной), могут оказаться в папке нежелательной почты Outlook.

person StingyJack    schedule 02.02.2009
comment
Спасибо за ответ, и извините за тот факт, что мой недавний застенчивый ответ почти сводит на нет необходимость того, чтобы я задавал вопрос. - person Ruben Bartelink; 02.02.2009
comment
Очень хороший момент, чтобы внимательно следить за папкой нежелательной почты при разработке (или папка «Отправленные» в моем случае была бы хорошей идеей: D) Что касается точки использования SNM, если бы я начал с нуля, я бы определенно взял этот маршрут в порядке, но код как код!. Большое спасибо. - person Ruben Bartelink; 02.02.2009

DOH!, на самом деле отправка электронной почты в Outlook 2007 приводит к внедрению изображений.

Размер отправленного элемента 8 КБ намного меньше размера черновика 60 КБ (RTF), который я видел, по сравнению с размером черновика 1 КБ (HTML, который не был преобразован в RTF и обратно).

Так что это было «Делать то, что я имею в виду» все время. Грр.

Я оставлю вопросы и ответы здесь на случай, если это поможет кому-то в таком же запутанном состоянии ума.

Кстати, некоторые полезные ссылки, которые я нашел в своем путешествии:

Пример отправки электронных писем

Общий сайт вопросов и ответов с другими примерами разного качества

person Ruben Bartelink    schedule 02.02.2009