我使用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?= 它必须是GeorgSpäthe或Georg Spaethe。
我认为问题在于这是带有其他编码的德国邮件。有人可以帮我解决这个问题吗?
答案 0 :(得分:7)
MIME标头按RFC 2047编码,因此您需要先解码它们。
String decoded = MimeUtility.decodeText("Georg =?ISO-8859-1?Q?SP=E4the?=");
JDK导入:
import javax.mail.internet.MimeUtility;
对于Android:
import com.android.email.mail.internet;
答案 1 :(得分:0)
每个Address对象都是InternetAddress,将其强制转换为该对象,并根据您的需要使用getAddress或getPersonal方法。
答案 2 :(得分:0)
对于它的价值:如果您的输入地址为InternetAddress
,您可以转换为toUnicodeString
并使用"Georg Späthe" <georg.spaethe@example.com>
以"Georg =?ISO-8859-1?Q?SP=E4the?=" <georg.spaethe@example.com>
的形式返回已解码的邮件。另外,正如比尔·香农所解释的那样,你可以拨打getPersonal
和getAddress
来获取解码后的值,这样就不需要自己摆弄MimeUtility
。