我想發送一封電子郵件與Java郵件API(javax.mail)。消息必須包含html,並且裏面有對圖像的引用。這是一個挑戰,因爲不允許引用磁盤上的物理文件,但我已經爲該映像創建了一個base64字符串(http://www.base64-image.de/step-1.php),並將該數據複製到靜態字符串變量。 With javax.mail我建立了一個類型爲的消息MulitPart分爲兩部分。第一部分是html本身,第二部分是圖像。通過<img src="cid:image-id"/>.
html電子郵件參考圖像base64字符串
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);
HTML部分參考圖像不幸的是,圖像中缺少接收的電子郵件。
當我指出我的磁盤上的文件,它的工作:
DataSource ds=new FileDataSource("c:/temp/image001.jpg");
imgPart.setDataHandler(new DataHandler(ds));
我們與拓藍髮展,我們不能引用 到外部文件,因爲這將使部署過程 更加複雜。
你可以在我的方法中找到一些錯誤的做法嗎?
親切的問候 Hilderich
一般方法是正確的。我懷疑圖像引用有問題。查看您發送的郵件的*完整*來源。圖像應該在那裏,檢查你引用它的ID是否正確。 – Durandal
謝謝!但是引用(Content-ID)拼寫正確。 – Hilde
我有同樣的問題,你找到任何解決方案? – TwTw