Java无法使用带图像的html发送电子邮件

我正在尝试使用带有两个图像的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", ""); 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", ""); multipart.addBodyPart(messageBodyPart); 

这很好,并显示图像。

有人请帮我解决这个问题。

使用ByteArrayDataSource而不是您自己的InputStreamDataSource。

您的代码只显示一个图像; 希望您为每个图像使用不同的Content-ID。

您的代码也不应该是html内容如何引用图像; 希望它使用正确的“cid:”URL。

JavaMail FAQ提供了有关如何发送包含图像的消息的更多信息。

对于其他任何有此问题的人。 我用@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", ""); multipart.addBodyPart(messageBodyPart); 

html字符串类似于:

 "\"Tile\"\r\n"