Я пытаюсь отправить составное / связанное HTML-письмо со встроенными изображениями в формате GIF. Это электронное письмо создано с использованием Oracle PL / SQL. Мои попытки не увенчались успехом, изображение отображается как красный крестик (в Outlook 2007 и почте Yahoo)
Я уже некоторое время отправляю электронные письма в формате html, но теперь мои требования заключаются в том, чтобы использовать в письме несколько изображений в формате GIF. Я могу хранить их на одном из наших веб-серверов и просто ссылаться на них, но многие пользователи почтовых клиентов не будут отображать их автоматически, и им нужно будет либо изменить настройки, либо вручную загружать их для каждого электронного письма.
Итак, мои мысли - встроить изображение. Мои вопросы:
- Что я здесь делаю не так?
- Правильный ли подход к встраиванию?
- Есть ли другие варианты, если мне нужно использовать все больше и больше изображений? Вложения не будут работать, поскольку изображения обычно представляют собой логотипы и значки, которые не имеют смысла вне контекста сообщения. Кроме того, некоторые элементы электронного письма являются ссылками на онлайн-систему, поэтому создание статического PDF-файла и его прикрепление не будут работать (насколько мне известно).
фрагмент кода:
MIME-Version: 1.0
To: me@gmail.com
BCC: me@yahoo.com
From: email@yahoo.com
Subject: Test
Reply-To: email@yahoo.com
Content-Type: multipart/related; boundary="a1b2c3d4e3f2g1"
--a1b2c3d4e3f2g1
content-type: text/html;
<html>
<head><title>My title</title></head>
<body>
<div style="font-size:11pt;font-family:Calibri;">
<p><IMG SRC="cid:my_logo" alt="Logo"></p>
... more html here ...
</div></body></html>
--a1b2c3d4e3f2g1
Content-Type: image/gif;
Content-ID:<my_logo>
Content-Transfer-Encoding: base64
Content-Disposition: inline
[base64 image data here]
--a1b2c3d4e3f2g1--
Большое спасибо.
BTW: Да, я проверил, что данные base64 верны, так как я могу встроить изображение в сам html (используя тот же алгоритм для создания данных заголовка) и увидеть изображение в Firefox / IE.
Я также должен отметить, что это НЕ для спама, электронные письма отправляются определенным клиентам, которые ожидают его ежедневно. Контент основан на данных, а не на рекламе.
<img src="URL" />
сработал у меня, но это было изображение, которое я разместил за пределами сайта. Это не работает для вас?Ответы:
Попробуйте вставить его напрямую, так вы сможете вставить несколько изображений в разные места в электронном письме.
И чтобы сделать этот пост полезным для других: Если у вас нет строки данных base64, легко создайте ее по адресу: http://www.motobit.com/util/base64-decoder-encoder.asp из файла изображения ,
Исходный код электронной почты выглядит примерно так, но я действительно не могу сказать вам, для чего нужна эта граница:
// РЕДАКТИРОВАТЬ: О, я просто понимаю, что если вы вставите первый фрагмент кода из моего сообщения, чтобы написать письмо с помощью thunderbird, thunderbird автоматически изменит код html, чтобы он выглядел почти так же, как второй код в моем сообщении.
источник
Другое решение - прикрепить изображение как вложение, а затем ссылаться на его html-код с помощью cid.
HTML-код:
Код C #:
источник
Я не нахожу здесь никаких полезных ответов, поэтому предлагаю свое решение.
Проблема в том, что вы используете
multipart/related
тип контента, который в данном случае не подходит. Я используюmultipart/mixed
и внутри негоmultipart/alternative
(работает на большинстве клиентов).Структура сообщения должна быть следующей:
Тогда это будет работать
источник
Если это не сработает, вы можете попробовать один из следующих инструментов, которые преобразуют изображение в таблицу HTML (однако помните о размере изображения):
источник
Использование Base64 для встраивания изображений в HTML - это здорово. Тем не менее, обратите внимание, что строки base64 могут увеличить размер вашего электронного письма.
Следовательно,
1) Если у вас много изображений, загрузка изображений на сервер и загрузка этих изображений с сервера может уменьшить размер вашего электронного письма. (Вы можете получить множество бесплатных услуг через Google)
2) Если в вашем письме всего несколько изображений, использование строк base64 - определенно отличный вариант.
Помимо вариантов, предоставленных существующими ответами, вы также можете использовать команду для создания строки base64 в Linux:
источник
Я знаю, что это старый пост, но текущие ответы не касаются того факта, что Outlook и многие другие поставщики электронной почты не поддерживают встроенные изображения или изображения CID. Самый эффективный способ разместить изображения в электронных письмах - разместить их в Интернете и разместить ссылку на них в электронном письме. Для небольших списков рассылки отлично подойдет общедоступный Dropbox. Это также снижает размер электронной почты.
источник
Чтобы встроенные изображения были полностью совместимы, вам нужны 3 границы.
Все идет внутри
multipart/mixed
.Затем используйте,
multipart/related
чтобы содержатьmultipart/alternative
заголовки ваших и ваших изображений.Наконец, включите свои загружаемые вложения в последнюю границу
multipart/mixed
.источник
На самом деле есть очень хороший пост в блоге, в котором перечислены плюсы и минусы трех различных подходов к этой проблеме Мартина Дэвиса. Вы можете прочитать его на https://sendgrid.com/blog/embedding-images-emails-facts/ .
Я хотел бы добавить четвертый подход с использованием фоновых изображений CSS.
Добавить
в тело электронной почты и класс css, например:
источник
Для тех, кто не смог заставить одно из этих решений работать: Отправить встроенное изображение по электронной почте. Следуя шагам, изложенным в решении, предложенном @ T30, я смог отобразить встроенное изображение без блокировки Outlook (предыдущие методы были заблокированы) . Если вы используете обмен, как и мы, тогда также:
вам нужно будет передать его хосту URL-адреса службы обмена. Помимо этого, следующее решение должно позволить вам легко отправлять встроенные изображения.
источник
Может быть интересно, что и Outlook, и Outlook Express могут создавать эти форматы электронной почты с несколькими изображениями, если вы вставляете файлы изображений с помощью функции меню «Вставить / Изображение».
Очевидно, что тип электронной почты должен быть установлен на HTML (а не на обычный текст).
Любой другой метод (например, перетаскивание или любой вызов командной строки) приводит к отправке изображения (изображений) как вложения.
Если вы затем отправите такое письмо самому себе, вы увидите, как оно отформатировано! :)
FWIW, я ищу автономный исполняемый файл Windows, который выполняет встроенные изображения из режима командной строки, но, похоже, их нет. Это путь, по которому многие пошли ... Можно сделать это, скажем, с помощью Outlook Express, передав ему соответствующим образом отформатированный файл .eml.
источник
Ниже приведен рабочий код с двумя способами достижения этого:
источник
Еще одна подсказка к сообщению Павла Перна, которое мне очень помогло (не могу комментировать свою репутацию, поэтому я публикую это как ответ): в некоторых версиях Microsoft Exchange удалено встроенное расположение содержимого ( см. Этот пост от Microsoft ). Изображение просто не является частью письма, которое пользователь видит в Outlook. В качестве обходного пути используйте вместо этого «Content-Disposition: attachement». Outlook 2016 не будет отображать изображения как вложения, которые используются в почтовом сообщении, хотя они используют «Content-Disposition: attachement».
источник
Если вы используете Outlook для отправки статического изображения с гиперссылкой, проще всего использовать Word.
источник