我正在尝试使用带有两个图像的html发送电子邮件。这两个图像从AngularJS客户端发送为base64字符串,如下所示:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAALuCAYAAAA9jTxNAAAgAElEQ
请注意,我已将base64字符串截断为太长。
String temp = baseString.split(",")[1];
byte[] tile = DatatypeConverter.parseBase64Binary(temp);
BodyPart messageBodyPart = new MimeBodyPart();
InputStream inputStream = new ByteArrayInputStream(tile);
DataHandler dataHandler = new DataHandler(new InputStreamDataSource(inputStream));
messageBodyPart.setDataHandler(dataHandler);
messageBodyPart.setHeader("Content-ID", "<image>");
multipart.addBodyPart(messageBodyPart);
InputStreamDataSource:
public class InputStreamDataSource implements DataSource {
private InputStream inputStream;
public InputStreamDataSource(InputStream inputStream) {
this.inputStream = inputStream;
}
public InputStream getInputStream() {
return inputStream;
}
public OutputStream getOutputStream() throws IOException {
throw new UnsupportedOperationException("Not implemented");
}
public String getContentType() {
return "*/*";
}
public String getName() {
return "InputStreamDataSource";
}
}
图片未显示在邮件中。
但是当我使用FileDataSource
而不是base64字符串时,它完全正常:
DataSource fds = new FileDataSource("D:\\Projects\\Extras\\sofa1.png");
messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setHeader("Content-ID", "<image>");
multipart.addBodyPart(messageBodyPart);
这样可以正常显示图像。
有人请帮我解决这个问题。
答案 0 :(得分:1)
使用ByteArrayDataSource代替您自己的InputStreamDataSource。
您的代码只显示一张图片;希望你为每张图片使用不同的Content-ID。
您的代码也不应该是html内容如何引用图像;希望它使用正确的“cid:”URL。
JavaMail FAQ提供了有关how to send messages that include images的更多信息。
答案 1 :(得分:0)
对于有这个问题的其他人。我用@Bill Shannon的答案修好了它。这将使用html电子邮件中的base64字符串设置图像src。
String temp = base64String.split(",")[1];
byte[] tile = DatatypeConverter.parseBase64Binary(temp);
BodyPart messageBodyPart = new MimeBodyPart();
DataHandler dataHandler = new DataHandler(new ByteArrayDataSource(tile, "image/png"));
messageBodyPart.setDataHandler(dataHandler);
messageBodyPart.setHeader("Content-ID", "<image>");
multipart.addBodyPart(messageBodyPart);
html字符串类似于:
"<img style=\"height: 100px; width: 100px;\" src=\"cid:image\" alt=\"Tile\" title=\"Tile\">\r\n"