1

我需要用图像实现电子邮件签名。截至目前,我们只支持已经工作的电子邮件签名中的文本。我需要提供可以在邮件签名中插入图像的功能。我可以将电子邮件发送给 myapplication 中的用户,也可以发送给 gmail、yahoo 等外部邮件域上的用户。当邮件发送给我的应用程序系统中的某个用户时,系统会进入数据库,并且当接收者在收件箱中接收时(内部从 db 读取邮件)。现在,如果用户在 gmail 上将邮件发送给外部用户,它会使用 javax mail api。同样,我可以接收来自外部邮件域(gmail、yahoo 等)的电子邮件现在我有几个问题基于 tis 要求:-

1)对于像gmail这样的外部邮件域如何将签名内的图像发送到另一个域,比如(我的应用程序邮件域),是否有任何标准?与它相关的另一点 gmail 用户可以有两张图片,一张用于签名,另一张用于正文。我将如何确定哪个图像属于签名?是否有任何已定义的属性?

2)也无法确定发送(无论是内部应用程序用户还是外部邮件域用户)包含图像的电子邮件签名的最佳/一致方法是什么,以便在用户收到图像时正确呈现?

我对第 2 点的想法是:- 我早些时候认为我可以使用如何在 jsp 中显示图像中建议的解决方案?. 使用标签<.img src="/getImage.action?imageId=123">,我可以从动作类或 servlet 中的 db 获取图像并返回。但请记住,一旦我在 gmail 上将邮件发送给用户,他将无法访问 servlet。所以这种方法似乎不符合要求。 然后我在电子邮件签名中遇到了另一个很棒的 stackoverflow 链接 base64 编码图像,其中 Tim Medora 的解决方案看起来很棒,但是解决方案下方的评论 Gmail 似乎不支持它再次结束我的朋友们,我真的认为如果像 gmail、雅虎这样的邮件域支持建议的解决方案,我应该这样做,因为在这种情况下,我可以将图像作为 base64 字符串而不是图像作为附件发送。

如果您能就第 1 点和第 2 点向我提供一些指示/方法,人们将不胜感激

4

2 回答 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" />
于 2012-06-20T17:27:30.013 回答
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");
于 2015-03-23T07:49:28.510 回答