Java 如何将多个内联base64编码图像附加到邮件?
我有以下代码Java 如何将多个内联base64编码图像附加到邮件?,java,jakarta-mail,mime-types,multipart,mime-message,Java,Jakarta Mail,Mime Types,Multipart,Mime Message,我有以下代码 final JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper; try { helper = new MimeMessageHelper(mimeMessage, false, "utf-8");
final JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper;
try {
helper = new MimeMessageHelper(mimeMessage, false, "utf-8");
String htmlMsg = "<body><div style="padding-top: 1px"><table
style="width: 100%"> <tr> <td align="left"><img align="left"
src="cid:**image1**" style="margin-left: -7px; width: 50%;"></td>
<td align="right"><img align="right" src="cid:**image2**"
style="margin-left: 100px; width: 50%;"> </td> </tr> </table></div>
<body>"
Multipart multipart = new MimeMultipart("related");
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(htmlMsg, "text/html");
messageBodyPart.setDisposition(BodyPart.INLINE);
multipart.addBodyPart(messageBodyPart);
InternetHeaders headers = new InternetHeaders();
headers.addHeader("Content-Type", "image/png");
headers.addHeader("Content-Transfer-Encoding", "base64");
String base64EncodedImageContentByteArray="encdoe value";
String base64EncodedImageContentByteArray1 = "encoded value";
MimeBodyPart imagePart1 = new MimeBodyPart(headers,
base64EncodedImageContentByteArray.getBytes());
imagePart1.setDisposition(MimeBodyPart.INLINE);
imagePart1.setContentID("image1");
imagePart1.setFileName("image1.jpg");
MimeBodyPart imagePart2 = new MimeBodyPart(headers,
base64EncodedImageContentByteArray1.getBytes());
imagePart2.setDisposition(MimeBodyPart.INLINE);
imagePart2.setContentID("image2");
imagePart2.setFileName("image2.jpg");
multipart.addBodyPart(imagePart1);
multipart.addBodyPart(imagePart2);
multipart.addBodyPart(messageBodyPart);
mimeMessage.setContent(multipart);
mimeMessage.setHeader("MIME-Version", "1.0");
final JavaMailSenderImpl mailSender=new JavaMailSenderImpl();
MimeMessage MimeMessage=mailssender.createMimeMessage();
mimessagehelper;
试试{
helper=新的mimessagehelper(mimessage,false,“utf-8”);
字符串htmlMsg=”
"
Multipart Multipart=新的mimemmultipart(“相关”);
MimeBodyPart messageBodyPart=新的MimeBodyPart();
messageBodyPart.setContent(htmlMsg,“text/html”);
messageBodyPart.setDisposition(BodyPart.INLINE);
multipart.addBodyPart(messageBodyPart);
InternetHeaders headers=新InternetHeaders();
headers.addHeader(“内容类型”、“图像/png”);
headers.addHeader(“内容传输编码”、“base64”);
字符串base64EncodedImageContentByteArray=“encdoe值”;
字符串base64EncodedImageContentByteArray1=“编码值”;
MimeBodyPart imagePart1=新的MimeBodyPart(标题,
base64EncodedImageContentByteArray.getBytes());
imagePart1.setDisposition(MimeBodyPart.INLINE);
imagePart1.setContentID(“image1”);
setFileName(“image1.jpg”);
MimeBodyPart imagePart2=新的MimeBodyPart(标题、,
base64EncodedImageContentByteArray1.getBytes());
imagePart2.setDisposition(MimeBodyPart.INLINE);
imagePart2.setContentID(“image2”);
setFileName(“image2.jpg”);
multipart.addBodyPart(imagePart1);
multipart.addBodyPart(imagePart2);
multipart.addBodyPart(messageBodyPart);
mimessage.setContent(多部分);
setHeader(“MIME版本”、“1.0”);
但是当我收到邮件时,第一个图像没有显示,而是显示在邮件中的第二个图像。对于第一个图像位置,它显示为十字。我还需要附加多个图像(base64编码值)在邮件中您自己不应该使用base64编码,您应该将其留给JavaMail,否则,请看下面的答案以获得灵感:好的。但是如何发送多个图像,因为我的图像以CLOB的形式存储在DB中。我使用了一条注释,因为这是一条与您的问题没有直接关系的建议(尽管可能是)。我需要对此进行测试,以找出解决方案,因为我通常不处理内联图像,而且我没有时间这样做。不过,我确实在您的代码中看到了很多奇怪的东西(对两个附件使用相同的
InternetHeaders
实例,添加messageBodyPart
两次,为邮件正文设置内联处置,显式设置mime版本,显式强制使用odd base64等)。它们都可能导致您的问题(或者可能不是…)是的,你的代码中有很多无关的操作。这应该可以帮助你简化事情。通过使用多个InternetHeader,我的问题得到了解决。