Как включить символ фунта в строке темы письма в java почте - PullRequest
2 голосов
/ 26 августа 2011

Как я могу включить символ фунта в строку темы письма, отправленного по почте java?

Он отображается неправильно, когда я его отправил.

Ответы [ 2 ]

6 голосов
/ 26 августа 2011

Тема является заголовком.Заголовки используют только ascii-7, поэтому для правильного кодирования ни одного символа ascii-7 не следует использовать правильное кодирование.

Если используемый вами класс позволяет указать некоторую попытку кодирования с UTF-8.

mimeMessage.setSubject(yourSubject, "UTF-8");

Если вы пишете заголовки вручную, используйте любой из следующих способов:

MimeUtility.encodeWord(yourSubject, "UTF-8", "B"); // base-64
MimeUtility.encodeWord(yourSubject, "UTF-8", "Q"); // quoted-printable

Это более или менее то, что MimeMessage делает в setSubject (str, encoding):

setHeader("Subject", MimeUtility.fold(9, MimeUtility.encodeText(subject, charset, null)));
// fold splits the value in several lines with no more than 72 chars

Образец

Я пробовал это:

public static void main(String[] args) throws Exception {
            // manual encoding
        System.out.println(MimeUtility.encodeText("How to include £ pound symbol", "UTF-8", "Q"));
        System.out.println(MimeUtility.encodeText("How to include £ pound symbol", "UTF-8", "B"));

            // MimeMessage encoding
        MimeMessage m = new MimeMessage((Session) null);
        m.setSubject("How to include £ pound symbol", "UTF-8");
        m.setContent("lalala", "text/plain");
        m.writeTo(System.out);
    }

и вывод был:

=?UTF-8?Q?How_to_include_=C2=A3_pound_symbol?=
=?UTF-8?B?SG93IHRvIGluY2x1ZGUgwqMgcG91bmQgc3ltYm9s?=

(...)

Message-ID: <21944831.01314352473121.JavaMail.HAC001ES@SE115179>
Subject: =?UTF-8?Q?How_to_include_=C2=A3_pound_symbol?=
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

lalala

В любом случае вы всегда можете использовать:

String yourEncodedString = MimeUtility.encodeText(str, "UTF-8", "Q");
mimeMessage.setHeader("Subject", yourEncodedString);
1 голос
/ 26 августа 2011

Установите кодировку UTF-8 ..

msg.setContent(message,"text/html; charset=UTF-8");
...