有些问题与电子邮件签名中的图像实现有关?

时间:2012-06-20 17:02:47

标签: java email base64 mime-types

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

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

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

我在脑海中对第2点的看法: - 我之前认为我可以使用How to display an image in jsp?建议的解决方案。哪里 标签< .img src =“/ getImage.action?imageId = 123”> ,我可以从动作类或servlet中的db获取图像并返回。但请记住  一旦我通过gmail将邮件发送给用户,他将无法访问servlet。所以这种方法似乎不符合要求。 然后我遇到了另一个很棒的stackoverflow链接 base64 encoded images in email signatures 蒂姆梅多拉的解决方案看起来很棒,但解决方案下面的评论 似乎不支持Gmail 再次结束了我的民众 我认为如果邮件域像gmail,雅虎支持建议的解决方案我真的应该这样做,因为在那种情况下我可以发送图像作为base64字符串而不是 图像作为附件。

如果你能为我提供关于第1点和第2点的指针/方法,那么人们会非常感激

2 个答案:

答案 0 :(得分:6)

要在电子邮件中包含图像,首先必须将图像作为MIME附件包含在电子邮件中。这些附件中的每一个都必须具有“Content-ID”标题。

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

[base64 string]
--f46d0444ea0d6991ba04b91c92e6--

2)然后,在电子邮件中,在src标记的<img>属性中添加Content-ID。

<img src="cid:theImage@abcd" />

答案 1 :(得分:0)

为了让Gmail能够看到字节数组中的嵌入图像,我在another similar question上发布了一个答案,即使用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");