从bytearray解码mimemultimessage会返回垃圾

时间:2018-04-13 13:45:35

标签: javamail

我必须制作一个可配置的电子邮件模板,我试图在数据库中存储MimeMultiMessage字节数组。 : -

    private byte[]encodeMsg(MimeMultipart multipart) {
    try 
    {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         multipart.writeTo(baos);
         return baos.toByteArray();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我的解码器是: -

    private MimeMultipart decodeMsg(byte[] byteArray) {
    MimeMultipart multipart = new MimeMultipart();
    DataSource ds = new ByteArrayDataSource(byteArray, "multipart/mixed");
    MimeBodyPart body = new MimeBodyPart();
    DataHandler dh = new DataHandler(ds);
    try {
        body.addHeader("Content-Type", "multipart/mixed");
        body.setDataHandler(dh);
        multipart.addBodyPart(body);
    } catch (MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return multipart;
}

在邮件中应该有三个图像附件,如果我不进行编码/解码,它就可以正常工作。 但是通过编码/解码,我得到一个名为noname的附件,其中包含垃圾(就像在记事本中看到的类一样)。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

存储MimeMultipart的内容的问题在于,您还需要存储来自相应MIME标头的元数据,特别是多部分子类型和边界值,以便您了解内容。存储整个MimeMessage要好得多,MimeMessage将包含允许正确解析内容的所有MIME头。

假设您确实要存储多部分内容,并且还存储了多部分的原始Content-Type值,则需要执行以下操作:

DataSource ds = new ByteArrayDataSource(byteArray, savedContentType);
MimeMultipart multipart = new MimeMultipart(ds);
return multipart;

假设byteArray包含multipart和的MIME格式内容 savedContentType是整个Content-Type标头值,包括边界参数。