Encoding javax.mail.Part和writeTo,无法获取相同的;eml";文件作为原始文件

Encoding javax.mail.Part和writeTo,无法获取相同的;eml";文件作为原始文件,encoding,jakarta-mail,Encoding,Jakarta Mail,我的应用程序通过javamail 1.5.6解析许多消息,它侦听传入的消息,然后存储关于它们的一些信息 几乎所有消息都包含数字签名,因此我的应用程序也需要检索完整的eml,即表示电子邮件的原始文件,这样应用程序用户就可以始终证明这些消息的有效性 所以,一旦我有了javax.mail.Message,我就必须生成它的eml,所以我要: ByteArrayOutputStream baos = new ByteArrayOutputStream(); m.writeTo(baos); this.or

我的应用程序通过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内容类型:文本/普通;字符集=iso-8859-15;格式=流式内容传输编码:8比特

在寓言中,这是一种意义上的艺术。11 R.D。 1611/1993,al messaggio PEC,oltre alla Relata di Notifica e 有争议的证明符合, --------------55D0DAEBFD4BF19F87D16E72

单词“conformitá”在结果字符串中未正确转换,它将变为“conformitè½”,例如使用MS Outlook打开此类eml将导致无效的数字签名,因此邮件看起来已损坏,与原始邮件不同


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

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


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

好的,我犯了一个理解错误,因为出于某种奇怪的原因,我确信要从字节流生成这种文件,我需要生成一个文本文件,所以我需要指定字符集。再次感谢。解决方案应该是简单地使用FileOutputStream。