Встроенное изображение отображается как вложение: JavaMail - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь отправить электронное письмо со встроенным изображением, но изображение отправляется в виде вложения, а не встроенного.

 MimeMessage mimeMessage = javaMailSender.createMimeMessage();
    try {
        String filename = "logo.jpeg";

        mimeMessage.setFrom(new InternetAddress("Bridge"));
        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
        mimeMessage.setSubject(subject);

        MimeMultipart multipart = new MimeMultipart();

        BodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setContent(content, "text/html");

        multipart.addBodyPart(messageBodyPart);
        messageBodyPart = new MimeBodyPart();

        DataSource fds = new ByteArrayDataSource(IOUtils.toByteArray(resourceFile.getInputStream()), MediaType.IMAGE_JPEG_VALUE);
        messageBodyPart.setDataHandler(new DataHandler(fds));
        messageBodyPart.setDisposition(MimeBodyPart.INLINE);
        messageBodyPart.setFileName(filename);
        messageBodyPart.setHeader("Content-ID", "<logoimg>");
        messageBodyPart.setHeader("Content-Type", MediaType.IMAGE_JPEG_VALUE);

        multipart.addBodyPart(messageBodyPart);

        mimeMessage.setContent(multipart);
        mimeMessage.saveChanges();

        javaMailSender.send(mimeMessage);
   }  catch (MailException | MessagingException | IOException e) {
        log.warn("Email could not be sent to user '{}'", to, e);
   }

А вот мой HTML код для изображения:

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

Я перепробовал все составные типы: «смешанный», «относительный», «альтернативный», но не смог заставить его работать.

Вот изображение для того же: enter image description here

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Вам не нужно встроенное изображение, вам нужно тело html, которое ссылается на прикрепленное изображение. Для этого вам нужно составное / связанное сообщение. См. FAQ по JavaMail .

0 голосов
/ 13 февраля 2020

Вам нужно добавить отдельную MimeBodyPart: например,

            BodyPart imgPart = new MimeBodyPart();

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

Затем в html вы ссылаетесь на изображение как:

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