内联图像显示为附件:javamail

yvgpqqbh  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(436)

我正试图发送一封带有内联图像的电子邮件,但该图像将作为附件而不是内联发送。

  1. MimeMessage mimeMessage = javaMailSender.createMimeMessage();
  2. try {
  3. String filename = "logo.jpeg";
  4. mimeMessage.setFrom(new InternetAddress("Bridge"));
  5. mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
  6. mimeMessage.setSubject(subject);
  7. MimeMultipart multipart = new MimeMultipart();
  8. BodyPart messageBodyPart = new MimeBodyPart();
  9. messageBodyPart.setContent(content, "text/html");
  10. multipart.addBodyPart(messageBodyPart);
  11. messageBodyPart = new MimeBodyPart();
  12. DataSource fds = new ByteArrayDataSource(IOUtils.toByteArray(resourceFile.getInputStream()), MediaType.IMAGE_JPEG_VALUE);
  13. messageBodyPart.setDataHandler(new DataHandler(fds));
  14. messageBodyPart.setDisposition(MimeBodyPart.INLINE);
  15. messageBodyPart.setFileName(filename);
  16. messageBodyPart.setHeader("Content-ID", "<logoimg>");
  17. messageBodyPart.setHeader("Content-Type", MediaType.IMAGE_JPEG_VALUE);
  18. multipart.addBodyPart(messageBodyPart);
  19. mimeMessage.setContent(multipart);
  20. mimeMessage.saveChanges();
  21. javaMailSender.send(mimeMessage);
  22. } catch (MailException | MessagingException | IOException e) {
  23. log.warn("Email could not be sent to user '{}'", to, e);
  24. }

下面是我的图像html代码:

  1. <img width="100" height="50" src="|cid:logoimg|" alt="phoenixlogo"/>

我尝试了所有的多部分类型:“混合”、“相对”、“替代”,但都没能成功。
以下是相同的图片:

htzpubme

htzpubme1#

您不需要内联图像,而是需要引用附加图像的html正文。为此,您需要一个多部分/相关的消息。请参阅javamail常见问题解答。

i7uq4tfw

i7uq4tfw2#

你需要添加一个单独的 MimeBodyPart :例如

  1. BodyPart imgPart = new MimeBodyPart();
  2. DataSource ds = new FileDataSource("D:/image.jpg");
  3. imgPart.setDataHandler(new DataHandler(ds));
  4. imgPart.setHeader("Content-ID", "<the-img-1>");
  5. multipart.addBodyPart(imgPart);

然后在html中,您将图像称为:

  1. <br>" + "<img src=\"cid:the-img-1\"/><br/>

相关问题