Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字节数组到MimeMultipart_Java_Encoding_Hex_Mime - Fatal编程技术网

Java 字节数组到MimeMultipart

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();

我正在为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();

    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);