我需要使用 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 引用图像,例如
<img src="cid:testImage"
- Outlook 将隐藏这样的附件。
也许你的最后一个问题是正确定义 CID。 Content-ID 属性必须透视前缀和后缀“<" and ">”,off filename 的值应与不带前缀“cid:”的 img 标签的 src 内容相同
所以你应该试试后缀.jpeg