Domino 10 有时不会在 Java 下解码 MIME 标头

Posted

技术标签:

【中文标题】Domino 10 有时不会在 Java 下解码 MIME 标头【英文标题】:Domino 10 sometime does not decode MIME headers under Java 【发布时间】:2019-07-31 09:51:51 【问题描述】:

我在 Domino 10.0.1 服务器上运行了一个 Java 1.8 程序,它读取 POP3/IMAP MIME 消息并从中创建一个 Notes MIME 邮件文档。

一切正常,除了一些(极少数)消息不转换编码的 MIME 标头。然后它们以这种丑陋的格式显示在 Notes 客户端中。

From: =?utf-8?Q?Test=20Subject?= <anyname@acme.com>

我在所有可能的地方都设置了“UTF-8”,并禁用了 MIME 到富文本的转换。

properties.setProperty("mail.mime.charset", "UTF-8");
...
boolean savedConversionFlag = dbGetSession().isConvertMime();
dbGetSession().setConvertMime(false);

这是什么原因造成的?

【问题讨论】:

看起来头部值包含了一个 RFC2047 中描述的编码词(例如From: =?US-ASCII?Q?Keith_Moore?= &lt;moore@cs.utk.edu&gt;)。您确定该值是否与原始 MIME 消息中的值相同?顺便说一句,这里是 RFC2047:ietf.org/rfc/rfc2047.txt 当您访问这样的消息时,JavaMail debug output 会显示什么? 您使用的是哪个 JavaMail 版本? 是随 IBM Domino 10.0.1 产品一起安装的 JavaMail:Manifest-Version: 1.0 Implementation-Version: 1.4 Specification-Title: JavaMail(TM) API Design Specification Specification-Version: 1.3 Implementation-Title: javax.mail Extension-Name: javax.mail Created-By: 1.5.0 (Sun Microsystems Inc.) Implementation-Vendor-Id: com.sun Implementation-Vendor: Sun Microsystems, Inc. Specification-Vendor: Sun Microsystems, Inc. SCCS-ID: @(#)javamail.mf 1.6 05/12/09 【参考方案1】:

我刚做了一个实验。我从我的 Gmail 帐户向我的 Notes 收件箱发送了一封主题为中文的电子邮件。 Domino 将主题存储为 RFC822 文本 项,如下所示:

Subject: =?UTF-8?B?5oiR6IO95ZCe5LiL546755KD6ICM5LiN5Lyk6Lqr5L2T44CC?=

当我在Notes中查看消息时,它正确显示了中文字符。

根据我的实验和您的 cmets,我认为您将编码字符串存储在 纯文本 项中,而不是 RFC822 文本中。区别很细微,但您可以通过查看 Notes 中的文档属性来验证这一点。如果您将值存储在纯文本项中,Notes 不知道它应该对其进行解码。

所以,我认为您有两种选择可以在 Notes 中进行这项工作:

    像您当前所做的那样以纯文本形式存储项目,但首先对字符串进行解码。我认为 JavaMail 能够帮助完成解码步骤。

    保留编码的值,但将其存储为 RFC822 文本项。这就是 Domino 路由器的作用。

由于我不能 100% 确定如何使用 Notes Java 类执行 #2,我可能会从第一个选项开始。

【讨论】:

谢谢戴夫!您为我指出了正确的解决方案。在我的程序中,整个 Domino 正文 MIMEEntry 是通过从 Java Mail API message.writeTo() 读取 MIME 流来创建的。问题是我检索完整发件人地址的方式,例如"John Smith" mailSenderAddressLong = mailFrom[0].toString() 将代码更改为 mailSenderAddressLong = mailFrom[0].toUnicodeString(); 后一切正常。非常感谢您的帮助!

以上是关于Domino 10 有时不会在 Java 下解码 MIME 标头的主要内容,如果未能解决你的问题,请参考以下文章

Lotus domino 都用啥编程语言啊?

在 Domino 9.0.1 FP 10 中启用/配置 CORS

Domino 10发布了,是起死回生还是回光返照?

JDBC无法与SQL Server建立SSL连接(Domino Java Agent FP 9)

编辑java程序时,DOS环境下汉字显示乱码,为啥?

101. Domino 10 就要来了