【问题标题】:javax.mail.Part and writeTo, unable to obtain the same "eml" file as the original onejavax.mail.Part 和 writeTo,无法获取与原始文件相同的“eml”文件
【发布时间】:2018-07-12 15:12:48
【问题描述】:

我的应用程序通过 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; format=flowed Content-Transfer-Encoding: 8bit

在 allegato si notifica ai sensi e per gli effetti dell'art。 11路 1611/1993, al messaggio PEC, oltre alla Relata di Notifica e 竞赛证明conformità, --------------55D0DAEBFD4BF19F87D16E72

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

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

【问题讨论】:

    标签: encoding jakarta-mail


    【解决方案1】:

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

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

    【讨论】:

    • 好吧,我理解错了,因为一些奇怪的原因,我确信要从字节流生成那种文件,我需要生成一个文本文件,所以我需要指定字符集。再次感谢。 FileOutputStream 的简单使用应该是解决方案。
    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多