HTML письмо с ссылкой на изображение в виде base64 String

1

Я хотел бы отправить электронное письмо с помощью Java Mail API (javax.mail). Сообщение должно содержать html и внутри есть ссылка на изображение. Существует проблема, потому что никакая ссылка на физический файл на диске не разрешена, но вместо этого я создал строку base64 (http://www.base64-image.de/step-1.php) для этого изображения и скопировал эти данные к статической переменной String. С javax.mail я создаю сообщение типа MulitPart с двумя частями. Первая часть - сам html, а вторая часть - изображение. Ссылка html на изображение с помощью <img src="cid:image-id"/>.

Message msg = new MimeMessage(session);
Multipart multipart = new MimeMultipart("related");
BodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent("<html><body><h2>A title</h2>Some text in here<br/>" +
                "<img src=\"cid:the-img-1\"/><br/> some more text<img src=\"cid:the-img-1\"/></body></html>", "text/html");
multipart.addBodyPart(htmlPart);

public static final String base64logo = "/9j/4AAQSkZJRgABAQEASABIAAD/4QBe…"; // ein ganz langer String erzeugt über http://www.base64-image.de/step-1.php

sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] imageByte = decoder.decodeBuffer(base64logo);
InternetHeaders header = new InternetHeaders();
BodyPart imgPart=new MimeBodyPart(header, imageByte);
imgPart.setHeader("Content-ID","the-img-1");
imgPart.setDisposition(MimeBodyPart.INLINE);
multipart.addBodyPart(imgPart);
msg.setContent(multipart);

К сожалению, во входящем сообщении отсутствует изображение.

Когда я указываю на файл на своем диске, он работает:

DataSource ds=new FileDataSource("c:/temp/image001.jpg");
imgPart.setDataHandler(new DataHandler(ds));

Мы развиваемся с помощью Talend, и мы не можем ссылаться на внешние файлы, потому что это сделает процесс развертывания более сложным.

Можете ли вы найти некоторые неправильные поступки в моем подходе?

С уважением, Hilderich

Теги:
javax.mail

2 ответа

1

Попробуйте поставить угловые скобки здесь

imgPart.setHeader("Content-ID","<the-img-1>");

Я нашел этот ответ на комментариях старого сообщения из этого блога

http://www.jroller.com/eyallupu/entry/javamail_sending_embedded_image_in

В комментарии Аравинда Велаядхана Наира

Это сработало для меня!

0

Об этом уже давно спрашивали. Но я отвечу на это, поскольку я столкнулся с той же проблемой, исходя из моего собственного ответа здесь.

byte[] tile = DatatypeConverter.parseBase64Binary(base64logo);
BodyPart messageBodyPart = new MimeBodyPart();
DataHandler dataHandler = new DataHandler(new ByteArrayDataSource(tile, "image/jpeg"));
messageBodyPart.setDataHandler(dataHandler);
messageBodyPart.setHeader("Content-ID", "<the-img-1>");
multipart.addBodyPart(messageBodyPart);
msg.setContent(multipart);

Надеюсь, это поможет кому-то.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню