Servlets JavaMail:生成的内联图像不正确
我在下面编写了servlet,它使用JavaMail以.eml格式生成电子邮件作为响应。浏览器检测到mime类型,并在收到响应时打开电子邮件应用程序Microsoft Live in my case。X-Unsent设置为1,因此打开电子邮件时可以编辑和发送 电子邮件内容是内嵌图像的HTML。当我打开生成的电子邮件时,我可以看到没有问题的内容。但是,当我输入地址并尝试发送电子邮件时,我收到一条或多条图像无法找到的消息,是否要继续?。我以任何方式发送它,当我检查电子邮件收件人的帐户时,会收到该电子邮件,但不会将图像内联,而是将其附加。生成内联图像的方式似乎有问题。有什么想法吗Servlets JavaMail:生成的内联图像不正确,servlets,jakarta-mail,Servlets,Jakarta Mail,我在下面编写了servlet,它使用JavaMail以.eml格式生成电子邮件作为响应。浏览器检测到mime类型,并在收到响应时打开电子邮件应用程序Microsoft Live in my case。X-Unsent设置为1,因此打开电子邮件时可以编辑和发送 电子邮件内容是内嵌图像的HTML。当我打开生成的电子邮件时,我可以看到没有问题的内容。但是,当我输入地址并尝试发送电子邮件时,我收到一条或多条图像无法找到的消息,是否要继续?。我以任何方式发送它,当我检查电子邮件收件人的帐户时,会收到该电子
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("message/rfc822");
response.setHeader("Content-Disposition", "attachment; filename=\"email.eml\"");
PrintWriter out = response.getWriter();
String eml = null;
try {
Message message = new MimeMessage(Session.getInstance(System.getProperties()));
message.addHeader("X-Unsent", "1");
message.setSubject("email with inline image");
// This mail has 2 parts, the BODY and the embedded image
MimeMultipart multipart = new MimeMultipart("related");
// first part (the html)
BodyPart messageBodyPart = new MimeBodyPart();
String htmlText = "<H1>This is the image: </H1><img src=\"cid:image\">";
messageBodyPart.setContent(htmlText, "text/html");
multipart.addBodyPart(messageBodyPart);
// second part (the image)
messageBodyPart = new MimeBodyPart();
String filePath = "C:/image.png";
DataSource fds = new FileDataSource(filePath);
messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setHeader("Content-Type", "image/png");
messageBodyPart.setHeader("Content-ID", "image");
messageBodyPart.setDisposition( MimeBodyPart.INLINE );
// add image to the multipart
multipart.addBodyPart(messageBodyPart);
// put everything together
message.setContent(multipart);
ByteArrayOutputStream os = new ByteArrayOutputStream();
message.writeTo(os);
eml = new String(os.toByteArray(),"UTF-8");
}
catch (MessagingException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
out.print(eml);
out.flush();
out.close();
}
请尝试此更简单的版本,该版本可能也会解决此问题:
// first part (the html)
MimeBodyPart messageBodyPart = new MimeBodyPart();
String htmlText = "<H1>This is the image: </H1><img src=\"cid:image\">";
messageBodyPart.setText(htmlText, null, "html");
multipart.addBodyPart(messageBodyPart);
// second part (the image)
messageBodyPart = new MimeBodyPart();
String filePath = "C:/image.png";
messageBodyPart.attachFile(filePath, "image/png", "base64");
messageBodyPart.setContentID("<image>");
// add image to the multipart
multipart.addBodyPart(messageBodyPart);
谢谢,这很有效,但是我必须使用messageBodyPart.AttachFilePath,因为它需要一个参数。您必须仍然使用JavaMail 1.4.x,新方法是在JavaMail 1.5中添加的。获取最新版本。