3

我使用 Javamail Api 为我的 Android 手机制作了一个电子邮件客户端。如果我尝试使用以下方法获取发件人的邮件地址和收件人的邮件地址:

Address[] froma = m.getFrom();
        String from = InternetAddress.toString(froma);

        Address[] toa = m.getRecipients(Message.RecipientType.TO);
        String to = InternetAddress.toString(toa);

我得到一个这样的字符串:

“Georg =?ISO-8859-1?Q?SP=E4the?= 必须是 Georg Späthe 或 Georg Spaethe。

我认为问题在于这是带有另一种编码的德国邮件。有人可以帮我解决这个问题吗?

4

3 回答 3

8

MIME 标头根据RFC 2047进行编码,因此您需要先对其进行解码。

String decoded = MimeUtility.decodeText("Georg =?ISO-8859-1?Q?SP=E4the?=");

JDK导入:

import javax.mail.internet.MimeUtility;

对于安卓:

import com.android.email.mail.internet;

另请参阅MimeUtility 的 Javadoc

于 2013-05-10T11:48:38.097 回答
0

每个地址对象都将是一个 InternetAddress,将其转换为该地址并根据您的需要使用 getAddress 或 getPersonal 方法。

于 2013-05-10T18:23:57.043 回答
0

对于它的价值:您可以转换为InternetAddress并使用toUnicodeString它将以"Georg Späthe" <georg.spaethe@example.com>如果您的输入地址为"Georg =?ISO-8859-1?Q?SP=E4the?=" <georg.spaethe@example.com>. 此外,正如 Bill Shannon 所解释的,您可以调用getPersonalgetAddress获取解码后的值,因此无需MimeUtility自己动手。

于 2018-06-14T13:48:04.123 回答