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?= <moore@cs.utk.edu>
)。您确定该值是否与原始 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 标头的主要内容,如果未能解决你的问题,请参考以下文章
在 Domino 9.0.1 FP 10 中启用/配置 CORS