在 outlook 电子邮件客户端中隐藏使用 cid 的嵌入式图像的附件

问题描述 投票:0回答:2

我需要使用 cid 嵌入图像,我在 java 中使用以下方法:

    MimeBodyPart messageBodyPart = new MimeBodyPart();
    byte[] imageDataBytes = Base64.getDecoder().decode(imageDataString);
    DataSource ds = new ByteArrayDataSource(imageDataBytes, "image/jpeg");
    messageBodyPart.setDataHandler(new DataHandler(ds));
    messageBodyPart.setContentID("<testImage>");
    messageBodyPart.setFileName("testImage.jpeg");
    messageBodyPart.setHeader("Content-Transfer-Encoding","base64");
    messageBodyPart.setHeader("X-Attachment-Id","testImage");
    messageBodyPart.setHeader("Content-Type","image/jpeg");
    messageBodyPart.setDisposition(MimeBodyPart.INLINE);
    emailBodyAndAttachments.addBodyPart(messageBodyPart);

它在 gmail 中看起来不错,就像在 outlook 和 mac 电子邮件客户端中一样,我将图像视为附加图像:

展望

是否有标题可以使其不显示为附件?

必须有一个,因为当我将图像拖放到gmail电子邮件中时,它们没有附件部分出现,而且它们还使用cid。

这就是我从 gmail 发送它时的样子,这也是我想要的:

展望

这些是 gmail 使用的标题:

--0000000000004076a905f77e39cf
Content-Type: image/jpeg; name="pexels-lisa-fotios-1540258.jpg"
Content-Disposition: inline; filename="pexels-lisa-fotios-1540258.jpg"
Content-Transfer-Encoding: base64
Content-ID: <ii_lfjsr1aq0>
X-Attachment-Id: ii_lfjsr1aq0

/9j/4AAQSkZJRgABAQ..........

这些是我附加的标题:

--_004_CAMNVZSzi1kPoPE3OoJQKBpjw6iFoN2GooxXSKEYAh4pafw4Sgmailg_
Content-Type: image/jpeg; name="testImage.jpeg"
Content-Description: testImage.jpeg
Content-Disposition: attachment; filename="testImage.jpeg"; size=3716152;
    creation-date="Thu, 23 Mar 2023 10:18:53 GMT";
    modification-date="Thu, 23 Mar 2023 10:19:19 GMT"
Content-ID: <testImage>
Content-Transfer-Encoding: base64
X-Attachment-Id: testImage

当然,图像在 HTML 中被引用为 cid:

java outlook smtp html-email email-attachments
2个回答
0
投票

确保您的 HTML 正文通过其 cid 引用图像,例如

<img src="cid:testImage"
- Outlook 将隐藏这样的附件。


0
投票

也许你的最后一个问题是正确定义 CID。 Content-ID 属性必须透视前缀和后缀“<" and ">”,off filename 的值应与不带前缀“cid:”的 img 标签的 src 内容相同

所以你应该试试后缀.jpeg

© www.soinside.com 2019 - 2024. All rights reserved.