问题确认

确认JavaMail以及后续的Jakarta Mail均存在解码问题。主要存在于邮件标题的解码部分。涉及到一下几个主要情况

  1. 同一个中文文字在标题栏编码后进行了换行方案:先解码,最终合并再转换为正确的字符串
  2. 在编码前已经存在了部分文字方案:编码申明之前的数据需要保存下来,而不是直接将整个字符串认为是原始数据。可以使用正则匹配来识别需要保存的编码等。
  3. 还有一种就是标题本身没有额外编码,但是没有说明编码导致了问题
  4. 使用apache-mime4j来进行解码,但其可应对的情况优先,生需要自己额外处理
  5. 有些邮件编码没有使用mime编码,但是又不是UTF8编码,这时需要使用juniversalchardet识别编码

解决方案:

注意:以下代码可能存在资源泄漏,仅作为demo演示。

示例代码,关注其中的decodeString函数

其中使用到的packages

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注