如何阻止电子邮件中的嵌入图像被 GMail 显示为附件?

Posted

技术标签:

【中文标题】如何阻止电子邮件中的嵌入图像被 GMail 显示为附件?【英文标题】:How to stop embedded images in email being displayed as attachments by GMail? 【发布时间】:2011-05-01 17:17:14 【问题描述】:

我正在发送带有嵌入图像(作为附件)的 html 电子邮件,并且图像在 GMail 中按预期显示。但是,它们也显示为电子邮件下的附件。有谁知道如何避免这种情况,即我只希望它们在电子邮件中而不是作为附件列出。我使用了“内容处置:内联”。我正在使用 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--

【问题讨论】:

【参考方案1】:

可以按照以下步骤从 GMail 中获取这样的邮件正文:

    在 Gmail 实验室中启用“由 Kent T 插入图片” 写一封邮件并将图片嵌入到邮件中 给自己发邮件 打开邮件。在右上角,按带有向下箭头的图片(在回复旁边),然后按“显示原件”。在那里您会找到此类邮件的示例。

我这样做并得到以下结果,其中图像未列为附件。也许这个邮件正文可以帮助您使用 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"  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
...

【讨论】:

好主意。我将尝试复制他们的标题,看看它是如何进行的。谢谢。 工作!我不得不改变几件事: 1. 第一个 Content-Type 必须是“Content-Type: multipart/related;” 2. 图片附件必须有“Content-Disposition: inline” 我正在使用带有节点的 emailjs,我注意到我必须在内容 id 周围使用尖括号:Content-ID: &lt;my-image-id&gt;。我希望对某人有所帮助。【参考方案2】:

使用 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);

【讨论】:

【参考方案3】:

对于 Gmail,请注意内容 ID 只能包含字母数字字符!

我的 CID 中有空格,只有 GMAIL 没有正确显示。我删除了空格,一切正常。

** 我强烈建议使用像 md5 这样的哈希函数来命名 cid **

【讨论】:

以上是关于如何阻止电子邮件中的嵌入图像被 GMail 显示为附件?的主要内容,如果未能解决你的问题,请参考以下文章

被 gmail 代理阻止的 SVG 图像

Gmail 中的 HTML 电子邮件 - 嵌入图像

Python - 使用嵌入图像向 GMAIL 发送邮件

将 Gmail 转换为 PDF:HTML 中的嵌入图像

使用 Gmail API 时,您能否以及如何在电子邮件中嵌入图像?

阻止“innerHTML”中的样式影响父级