Domino 10 иногда не декодирует заголовки MIME в Java

#java #jakarta-mail #lotus-domino #mime #ibm-domino

#java #джакарта-почта #lotus-domino #mime #ibm-domino

Вопрос:

У меня есть программа Java 1.8, запущенная на сервере Domino 10.0.1, которая считывает MIME-сообщения POP3 / IMAP и создает из них почтовый документ 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);
  

Что может быть причиной этого?

Комментарии:

1. Похоже, что значение заголовка включает в себя закодированное слово, как описано в RFC2047 (например, From: =?US-ASCII?Q?Keith_Moore?= <moore@cs.utk.edu> ). Вы определили, было ли значение таким же в исходном сообщении MIME? Кстати, вот RFC2047: ietf.org/rfc/rfc2047.txt

2. Что показывает вывод отладки JavaMail при доступе к подобному сообщению?

3. Какую версию JavaMail вы используете?

4. Это JavaMail, который устанавливается с продуктом IBM Domino 10.0.1: 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 сохранил тему в виде текстового элемента в формате, подобном этому:

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

Когда я просматриваю сообщение в Notes, оно правильно отображает китайские символы.

Основываясь на моем эксперименте и ваших комментариях, я думаю, что вы сохраняете закодированную строку в элементе обычного текста, а не в тексте RFC822. Разница небольшая, но вы можете убедиться в этом, просмотрев свойства документа в Notes. Если вы сохраняете значение в обычном текстовом элементе, Notes не знает, что оно должно его декодировать.

Итак, я думаю, у вас есть два варианта, чтобы заставить это работать в Notes:

  1. Сохраните элемент в виде обычного текста, как вы делаете в данный момент, но сначала декодируйте строку. Я предполагаю, что JavaMail может помочь с этапом декодирования.

  2. Оставьте значение в кодировке, но сохраните его как текстовый элемент RFC822. Это то, что делает маршрутизатор Domino.

Поскольку я не уверен на 100%, как выполнить # 2 с классами Java Notes, я бы, вероятно, начал с первого варианта.

Комментарии:

1. Спасибо, Дэйв! Вы указали мне на правильное решение. В моей программе MIMEEntry всего тела Domino создается путем чтения потока MIME из сообщения Java Mail API message.writeTo(). Проблема заключалась в том, как я извлек полный адрес отправителя, например, «Джон Смит» <jsmith@acme.com > mailSenderAddressLong = mailFrom[0].toString() После изменения кода на mailSenderAddressLong = mailFrom[0].toUnicodeString(); все работает нормально. Большое вам спасибо за вашу помощь!