Мне нужно реализовать подпись электронной почты с изображением. Теперь мы поддерживаем только текст в электронной подписи, который уже работает. Мне нужно предоставить функциональность где я могу вставить изображение внутри электронной почты. я могу отправить электронное письмо пользователю в 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
Чтобы включить изображения в сообщение электронной почты, сначала вы должны включить изображения в качестве вложений 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" />
Чтобы 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");