Некоторые вопросы, связанные с внедрением изображения в подписи электронной почты?

1

Мне нужно реализовать подпись электронной почты с изображением. Теперь мы поддерживаем только текст в электронной подписи, который уже работает. Мне нужно предоставить функциональность где я могу вставить изображение внутри электронной почты. я могу отправить электронное письмо пользователю в myapplication, а также пользователю на внешний почтовый домен, такой как gmail, yahoo и т.д. Когда mail отправляется кому-либо из пользователей в моей прикладной системе, система делает запись в DB и когда получатель получает входящие сообщения (которые внутренне читают почту из db). Теперь, если пользователь отправьте почту внешнему пользователю в gmail, он использует javax mail api. Similary я могу получить электронную почту от внешних почтовых доменов (gmail, yahoo и т.д.) Теперь у меня есть несколько вопросов, основанных на требованиях: -

1) Существует ли какой-либо стандарт того, как внешние почтовые домены, такие как gmail, отправляют изображение внутри подписи в другие домены, например (мой почтовый домен приложения)? Еще один момент, связанный с этим, пользователь gmail может иметь два изображения: один для подписи и другое изображение внутри тела. Как определить, к какому изображению относится подпись? Есть ли для этого определенное свойство?

2) Также не удается определить, какой наилучший/последовательный подход к отправке (будь то пользователю внутреннего приложения или пользователю внешнего почтового домена) подпись электронной почты, содержащая образ, чтобы он правильно отображался, когда пользователь его получил?

что я имел в виду для пункта 2: - Раньше я думал, что могу использовать решение, предложенное в Как отобразить изображение в jsp?. где с тегом <.img src= "/getImage.action? imageId = 123" > , я могу извлечь изображение из db в класс действия или сервлет и вернуть. Но имея в виду  как только я отправлю почту пользователю на gmail, он не сможет получить доступ к сервлету. Так что этот подход, похоже, не соответствует требованиям. Затем я наткнулся на другую отличную ссылку на stackoverflow кодированные изображения base64 в подписях электронной почты, где решение Tim Medora выглядело замечательно, но снова комментарий ниже решения Gmail, похоже, не поддерживает его. снова закончил мои люди действительно я думаю, что я должен быть сделан, если почтовый домен, такой как gmail, yahoo поддерживает предложенное решение, потому что в этом случае я могу отправить изображение как base64 string вместо изображения в качестве вложения.

Люди были бы очень благодарны, если бы вы могли предоставить мне некоторый указатель/подход относительно обеих точек 1 и 2

Теги:
base64
email
mime-types

2 ответа

6
Лучший ответ

Чтобы включить изображения в сообщение электронной почты, сначала вы должны включить изображения в качестве вложений MIME в электронное письмо. Каждое из этих вложений должно иметь заголовок "Content-ID".

--f46d0444ea0d6991ba04b91c92e6
Content-Type: image/gif; name="theImage.gif"
Content-Transfer-Encoding: base64
Content-ID: <theImage@abcd>

[base64 string]
--f46d0444ea0d6991ba04b91c92e6--

2) Затем в сообщении электронной почты включите Content-ID в атрибут src тега <img>.

<img src="cid:theImage@abcd" />
  • 0
    Привет, Майкл. Спасибо за ответ. Вы говорите, что я должен сделать что-то вроде этого rgagnon.com/javadetails/java-0504.html в моем классе Java при отправке сообщения. Если да, я не вижу в примере настройки свойств base64 string, content-id, content-type и т. Д. Не могли бы вы указать мне фрагмент кода для выполнения того, что вы объяснили в пункте 1 в Java. Извините, я новичок в этом материале. Еще один момент, я не могу отправить отправить просто в виде строки base64, как это
  • 0
    <img src = "data: image / png; base64, iVBORw0KGgoAAAANSUhEUgAAAAUA AAAFCAYAAACNbyblAAAAHElEQVQI12P4 // 8 / w38GIAXDIBKE0DHxgljNBAAO 9TXL0AA =
Показать ещё 7 комментариев
0

Чтобы Gmail видел встроенное изображение из массива байтов, я отправил ответ на еще один подобный вопрос, который должен использовать ByteArrayDataSource и вставить его в HtmlEmail. Здесь фрагмент кода:

import javax.mail.util.ByteArrayDataSource;
import org.apache.commons.mail.ImageHtmlEmail;
...
ImageHtmlEmail email = new ImageHtmlEmail();
byte[] qrImageBytes = createQRCode(); // get your image byte array
ByteArrayDataSource qrImageDataSource = new ByteArrayDataSource(qrImageBytes, "image/png");
String contentId = email.embed(qrImageDataSource, "QR Image");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню