我必须制作一个可配置的电子邮件模板,我试图在数据库中存储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的附件,其中包含垃圾(就像在记事本中看到的类一样)。
我错过了什么?
答案 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标头值,包括边界参数。