Apache James - в сообщении отсутствует информация о кодировке - PullRequest
1 голос
/ 04 ноября 2011

Я создаю сообщение электронной почты, используя Apache James.Я добавляю TextBody к сообщению с содержанием text / html:

for (int i = 0, bodyPartsSize = bodyParts.size(); i < bodyPartsSize; i++) {
    BodyPart bodyPart = (BodyPart) bodyParts.get(i);
    if ("text/html".equalsIgnoreCase(bodyPart.getMimeType()) {
        TextBody originalBody = (TextBody) bodyPart.getBody();
        byte[] bytes = IOUtils.toByteArray(originalBody.getInputStream());
        byte[] msgBytes = convert(bytes);

        String charset = bodyPart.getCharset();
        TextBody newBody = new StorageBodyFactory().textBody(new ByteArrayInputStream(msgBytes), charset);
        BodyPart bp = new BodyPart();
        bp.setBody(newBody, bodyPart.getMimeType());
        mp.replaceBodyPart(bp, i); 
    } 
}

к сожалению, когда я отправляю сообщение, в выводе отсутствует информация о кодировке:

Исходное сообщение имеет:

--Apple-Mail-7-654436364
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
    charset=iso-8859-2

преобразовано:

--Apple-Mail-7-654436364
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;

Я не могу выяснить, почему он не добавляет информацию о кодировке.Кодирование является основным, но в почтовом клиенте вы должны выбрать его вручную в каком-то клиенте.

Любая помощь?

Заранее спасибо!

Конрад

1 Ответ

0 голосов
/ 06 ноября 2011

Итак, после нескольких часов пробования всех возможностей, я думаю, что это может быть ошибкой в ​​Джеймсе. Но я нашел обходной путь.

Хотя используется заводской метод с указанием кодировки:

TextBody newBody = new StorageBodyFactory().textBody(new ByteArrayInputStream(msgBytes), charset);

BodyPart bp = new BodyPart();
bp.setBody(newBody, bodyPart.getMimeType());
mp.replaceBodyPart(bp, i);

кодировка отсутствует в последнем сообщении.

Когда я перезаписываю заголовок вручную:

TextBody newBody = new StorageBodyFactory().textBody(new ByteArrayInputStream(msgBytes), charset);

BodyPart bp = new BodyPart();
bp.setBody(newBody, bodyPart.getMimeType());
bp.getHeader().setField(ContentTypeFieldImpl.PARSER.parse(new RawField(FieldName.CONTENT_TYPE, "text/html; charset=" + charset), new DecodeMonitor()));
mp.replaceBodyPart(bp, i);

Charset отсутствует.

...