【发布时间】:2017-06-05 16:29:21
【问题描述】:
我正在尝试使用包含两个图像的 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);
这可以正常工作并显示图像。
请有人帮我解决这个问题。
【问题讨论】:
标签: java gmail base64 jakarta-mail