Java 字节数组到MimeMultipart
我正在为MIMI多部分编写一种编码器/解码器。Java 字节数组到MimeMultipart,java,encoding,hex,mime,Java,Encoding,Hex,Mime,我正在为MIMI多部分编写一种编码器/解码器。 编码器:模拟多部分->十六进制字符串 解码器:HexString->mimi多部分 此方法创建MimeMultipart以供以后编码: private MimeMultipart compose_mail(String to, String body) throws Exception{ Document d = XMLConnector.get("body.html"); String html_body = d.html();
编码器:模拟多部分->十六进制字符串
解码器:HexString->mimi多部分 此方法创建MimeMultipart以供以后编码:
private MimeMultipart compose_mail(String to, String body) throws Exception{
Document d = XMLConnector.get("body.html");
String html_body = d.html();
MimeMultipart multipart = new MimeMultipart("related");
// Body part
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(html_body, "text/html; charset=\"UTF-8\"");
multipart.addBodyPart(messageBodyPart);
// Image part
File img_file = new File("img/logo.png");
MimeBodyPart messageImgPart = new MimeBodyPart();
messageImgPart.setHeader("Content-Type", "image/jpeg");
messageImgPart.setHeader("Content-ID","<logo>");
messageImgPart.setDisposition(MimeBodyPart.INLINE);
messageImgPart.setFileName("logo inline image");
messageImgPart.attachFile(img_file);
multipart.addBodyPart(messageImgPart);
return MimeMultipart;
}
最后一种方法必须解码字符串:
public MimeMultipart decode(String encoded_body) throws Exceptions {
MimeMultipart body = null;
String[] parts = encoded_body.split(";", 2);
byte[] body_b = Hex.decodeHex(parts[0].toCharArray());
ByteArrayDataSource bads = new ByteArrayDataSource(body_b, parts[1]);
body = new MimeMultipart(bads);
return body;
}
我做了一些检查:1) 我发送了原件MimeMultipart:
MimeMessage msg = new MimeMessage(session);
msg.setHeader("Content-Type", "text/html; charset=\"UTF-8\"");
msg.setSubject(subject, "UTF-8");
msg.setContent(body, "text/html; charset=\"UTF-8\"");
Transport.send(msg);
我收到了需要的邮件(html显示为html,图像显示为图像)。当我以同样的方式发送编码->解码邮件时,我得到的是源html,而不是呈现的html,并且图像似乎已损坏。
2) 我检查了解码的MimeMultipart,发现0个部分 这里可能出了什么问题 更新:
大约2:MimeMultipart包含0个部分,因为来自流的解析仅在需要时完成,即在getParts()调用期间 “编码->解码邮件”是什么意思?你的意思是你正在编码它,然后立即再次解码,然后发送它?这似乎没有任何意义,只是让你觉得简单而已。真正的流程是:编码->(通过邮件/通过数据库发送到其他位置)->在另一个comp上解码我不明白。HTML就是HTML。没有“源HTML”或“呈现HTML”这样的东西,只有两种方式可以查看HTML—纯文本或网页。解码后如何查看HTML?源html是您在记事本中编写的,呈现的html是您在呈现引擎(浏览器、邮件客户端等)中看到的。我的意思是,我在邮件客户端中看到的呈现页面是可以的,但在编码+解码后,我看到的是html而不是呈现页面。
MimeMessage msg = new MimeMessage(session);
msg.setHeader("Content-Type", "text/html; charset=\"UTF-8\"");
msg.setSubject(subject, "UTF-8");
msg.setContent(body, "text/html; charset=\"UTF-8\"");
Transport.send(msg);