如何防止Gmail将电子邮件中的嵌入式图片显示为附件?

8
我正在发送带有嵌入式图像(作为附件)的HTML电子邮件,这些图像在GMail中显示正常。但是它们也会出现在电子邮件下面的附件中。有人知道如何避免这种情况吗?即我只想让它们出现在电子邮件中,而不列在附件中。我已经使用了“Content-Disposition: inline”。我正在使用Spring和JavaMail。
以下是我的邮件最终的样子。有人能看出问题在哪里吗?
Delivered-To: ...
...
Subject: ...
MIME-Version: 1.0
Content-Type: multipart/mixed; 
    boundary="----=_Part_0_1248835444.1288246311187"

------=_Part_0_1248835444.1288246311187
Content-Type: multipart/related; 
    boundary="----=_Part_1_592250078.1288246311197"

------=_Part_1_592250078.1288246311197
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

<html>
<body>
<p><img src="cid:a0"/></p>
</body>
</html>
------=_Part_1_592250078.1288246311197
Content-Type: image/x-png
Content-Transfer-Encoding: base64
Content-Disposition: inline
Content-ID: <a0>

iVBORw0KGgoAAAANSUhEUgAAAPAAAABQCAYAAAAnSfh8AAAACXBIWXMAAC4jAAAuIwF4pT92AAAA
...
Qcz8hzyUxqGHjkNbsY4Df5iBg6OIwafQHBxFjP8PAIwl43uhncLdAAAAAElFTkSuQmCC
------=_Part_1_592250078.1288246311197--

------=_Part_0_1248835444.1288246311187--
3个回答

5
通过以下步骤,您可以在Gmail中获得这样的邮件正文:
  1. 在Gmail实验室中启用“通过Kent T插入图像”
  2. 编写一封邮件并将图像嵌入邮件中
  3. 将邮件发送给自己
  4. 打开该邮件。在右上角,点击带有向下箭头的图片(就在回复按钮旁边),然后点击“显示原始邮件”。您将找到这样一封邮件的示例。
我已经执行了此操作,并获得了以下结果,其中图像未列为附件。也许这个邮件正文可以帮助您创建一个适当的Spring和JavaMail邮件:
MIME-Version: 1.0
...
Subject: ...
From: ...
To: ...
Content-Type: multipart/related; boundary=000e0cd62fb69a9c280493a7a1c0

--000e0cd62fb69a9c280493a7a1c0
Content-Type: multipart/alternative; boundary=000e0cd62fb69a9c250493a7a1bf

--000e0cd62fb69a9c250493a7a1bf
Content-Type: text/plain; charset=ISO-8859-1

[image: abc.png]

--000e0cd62fb69a9c250493a7a1bf
Content-Type: text/html; charset=ISO-8859-1

<img src="cid:ii_12bf191c5eab934e" alt="abc.png" title="abc.png"><br>

--000e0cd62fb69a9c250493a7a1bf--
--000e0cd62fb69a9c280493a7a1c0
Content-Type: image/png; name="abc.png"
Content-Transfer-Encoding: base64
Content-ID: <ii_12bf191c5eab934e>
X-Attachment-Id: ii_12bf191c5eab934e

iVBORw0KGgoAAAANSUhEUgAAAJ4AAADLCAIAAAAQpL1oAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA
...

好主意。我会尝试复制他们的头部并看看效果如何。谢谢。 - David Tinker
2
工作了!我必须更改几件事情:
  1. 第一个Content-Type必须是“Content-Type: multipart/related;”
  2. 图像附件不能有“Content-Disposition: inline”
- David Tinker
2
我正在使用Node中的emailjs,并且注意到我需要在内容ID周围使用尖括号:Content-ID: <my-image-id>。希望这对某人有所帮助。 - snapfractalpop

0

使用Spring,您可以像这样实现:

MimeMessagePreparator message = mimeMessage -> {
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
        mimeMessageHelper.setFrom(new InternetAddress(emailSender));
        mimeMessageHelper.setTo("user@server.com");
        mimeMessageHelper.setSubject("A subject");
        String html = ... // contains a tag <img src='cid:logoIcon'>
        mimeMessageHelper.setText(html, true);

        mimeMessageHelper.addInline("logoIcon", new ClassPathResource("/data/images/logo.png"));
    };
mailSender.send(message);


0

对于 Gmail,要小心只使用字母数字字符的内容 ID!

我的 CID 中有空格,只有 GMAIL 显示不正确。我去掉了空格,一切都正常了。

** 我强烈建议使用哈希函数(如 md5)来命名 cid **


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接