javax.mail.Part和writeTo,无法获得与原始文件相同的“ eml”文件

时间:2018-07-12 15:12:48

标签: encoding javamail

我的应用程序通过javamail 1.5.6解析许多消息,它侦听传入的消息,然后存储有关它们的一些信息。

几乎所有消息都包含数字签名,因此我的应用程序也需要检索完整的eml,即代表电子邮件的原始文件,这样,应用程序用户就可以始终证明这些消息的有效性。

因此,一旦有了javax.mail.Message,就必须产生其eml,所以我要做:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
m.writeTo(baos);
this.originalMessage = baos.toString(StandardCharsets.UTF_8.name());

这种方法通常有效,但是我有一些包含以下内容的多部分消息:

  

这是MIME格式的多部分消息。   -------------- 55D0DAEBFD4BF19F87D16E72内容类型:文本/纯文本; charset = iso-8859-15;格式=流式内容传输编码:8位

     

每本eff effetti dell'art中的《通知》。 11 R.D.   1611/1993,Al messaggio PEC,新闻发布   conformità竞赛证明,   -------------- 55D0DAEBFD4BF19F87D16E72

单词“conformità”未正确转换为结果字符串,变为“conformit�”,例如,使用MS Outlook打开此类eml会导致无效的数字签名,因此消息看起来已损坏,与原始消息不同

您有相同的想法吗?非常感谢

1 个答案:

答案 0 :(得分:0)

原始消息不是是UTF-8编码的字符串,“ eml”文件也不是UTF-8编码的文件。它们都是字节流,您的数字签名应该可以在字节流上工作。

在您的特定示例中,消息部分的内容是使用iso-8859-15字符集而不是UTF-8编码的。