java - 使用 Java 邮件 API 阅读电子邮件时引用/打印的未知编码

标签 java encoding jakarta-mail quoted-printable

我有一个自己编写的 Java 邮件客户端,它从邮件服务器读取消息。

我没有遇到任何问题,但最近我发现了一个异常,当这个客户端试图阅读一封复杂的电子邮件时。堆栈跟踪表明,编码“引用/可打印”是未知的,可能此信息足以找到解决方案。

无论如何,我会完成问题并将日志放在这里:

java.io.IOException: Unknown encoding: quoted/printable
at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:113)
at com.sun.mail.handlers.text_plain.getContent(text_plain.java:107)
at javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:790)
at javax.activation.DataHandler.getContent(DataHandler.java:537)
at javax.mail.internet.MimeBodyPart.getContent(MimeBodyPart.java:644)

这里是消息部分,包含这个编码信息

--=_374450e655545f2af979375837b3e516
Content-Transfer-Encoding: quoted/printable
Content-Type: text/plain; charset=utf-8

其余信息是一些 thml 格式的文本。

那么,有没有办法在不更改 javax.mail 提供程序/版本的情况下解决问题? 现在我正在使用

 group: 'com.sun.mail', name: 'javax.mail', version: '1.5.1'

或者也许我只是误解了问题,我应该用另一种方式解决它?

最佳答案

无论哪个邮件程序创建了该消息,它都被破坏了。请将该问题报告给该邮件的所有者。正确的名称是“quoted-printable”,而不是“quoted/printable”。

大多数情况下,此类错误是业余爱好者编写垃圾邮件程序而没有首先阅读 RFC 的结果。

您可以将系统属性“mail.mime.ignoreunknownencoding”设置为“true”,让 JavaMail 忽略错误而不尝试解码数据。您也可以捕获异常,使用 getEncoding 方法获取 header 的值,并尝试猜测发送者的想法,然后使用 getRawInputStream 方法自行解码数据。

关于java - 使用 Java 邮件 API 阅读电子邮件时引用/打印的未知编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26487164/

相关文章:

java - 使用 Java Mail 验证带有 Outlook 2013 签名的电子邮件

java - 如何解决 javax.mail.AuthenticationFailedException

Java - 电子邮件签名

java - 多种配置文件- Spring Bean 注入(inject)

ios - 如何解码对象数组并从用户默认值中检索它?

c# - 使用 LINQ to XML 在 XML 元素内对双引号进行编码

javascript - 使用 & 编码 URL 组件

java - 链接堆栈上浅复制的 J 单元测试失败

java - 一个奇怪的常客

java - 如何在Java中迭代多维数组?