Вставка изображения непосредственно в шаблон HTML с помощью Javamail - PullRequest
2 голосов
/ 15 марта 2011

Привет всем, я видел много тем на эту тему, но не совсем то, что я ищу.

По сути, когда я отправляю свое сообщение Javamail, у меня будет изображение в виде объекта byte [], и у меня будет строка, содержащая шаблон html. То, что я хочу сделать, это не хранить его на сервере (я не хотел пытаться справиться с хранением изображения на сервере, и у нас будет ограниченное пространство для работы). Я хотел бы взять объект byte [], который у меня уже есть, и напрямую сохранить его в html-шаблоне, убедившись, что он находится в правильном теге изображения. Есть ли способ, которым я мог бы сделать это? В основном я хочу вставить сообщение.setContent ("бла", "изображение / jpg"); непосредственно в шаблон HTML в определенном месте.

Надеюсь, я здесь понял ...

Еще одна идея, о которой я думал, - добавить изображение в качестве вложения и просто ссылаться на вложение при отображении HTML-шаблона .... если это возможно.

Ответы [ 2 ]

7 голосов
/ 16 марта 2011

Вы добавляете изображение как вложение, а затем делаете ссылку на него с префиксом «cid».

//
// This HTML mail have to 2 part, the BODY and the embedded image
//
MimeMultipart multipart = new MimeMultipart("related");

// first part  (the html)
BodyPart messageBodyPart = new MimeBodyPart();
String htmlText = "<H1>Hello</H1><img src=\"cid:image@foo.com\">";
messageBodyPart.setContent(htmlText, "text/html");

// add it
multipart.addBodyPart(messageBodyPart);

// second part (the image)
messageBodyPart = new MimeBodyPart();
DataSource fds = new FileDataSource
  ("C:\\images\\foo.gif");
messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setHeader("Content-ID","<image@foo.com>");

// add it
multipart.addBodyPart(messageBodyPart);

// put everything together
message.setContent(multipart);

Полный пример здесь

1 голос
/ 16 марта 2011

Попробуйте следующее, используя ByteArrayDataSource для включения ваших байтов изображения в почту

// Add html content
// Specify the cid of the image to include in the email

String html = "<html><body><b>Test</b> email <img src='cid:my-image-id'></body></html>";
Multipart mp = new MimeMultipart();
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html");
mp.addBodyPart(htmlPart);

// add image in another part

MimeBodyPart imagePart = new MimeBodyPart();
DataSource fds = new ByteArrayDataSource(imageBytes, imageType);
imagePart.setDataHandler(new DataHandler(fds));

// assign a cid to the image

imagePart.setHeader("Content-ID", "<my-image-id>"); // Make sure you use brackets < >
mp.addBodyPart(imagePart);

message.setContent(mp);

Адаптировано из примера @ http://helpdesk.objects.com.au/java/how-to-embed-images-in-html-mail-using-javamail

...