我的应用程序通过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会导致无效的数字签名,因此消息看起来已损坏,与原始消息不同>
您有相同的想法吗?非常感谢
答案 0 :(得分:0)
原始消息不是是UTF-8编码的字符串,“ eml”文件也不是UTF-8编码的文件。它们都是字节流,您的数字签名应该可以在字节流上工作。
在您的特定示例中,消息部分的内容是使用iso-8859-15字符集而不是UTF-8编码的。