Pergunta

I made an E- Mail Client for my Android phone with the Javamail Api. If I try to get the sender's mail address and the recipients mail address with the following methods:

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

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

I get a String like this back:

"Georg =?ISO-8859-1?Q?SP=E4the?= and it has to be Georg Späthe or Georg Spaethe.

I think the Problem is that this are German Mails with another encoding. Can anybody help me to solve that problem?

Foi útil?

Solução

MIME headers are encoded as per RFC 2047, therefore you need to decode them first.

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

JDK import:

import javax.mail.internet.MimeUtility;

For Android:

import com.android.email.mail.internet;

See also Javadoc of MimeUtility

Outras dicas

Each of the Address objects will be an InternetAddress, cast it to that and use the getAddress or getPersonal method depending on what you want.

For what it's worth: You can cast to InternetAddress and use toUnicodeString that will return the decoded mail in the form of "Georg Späthe" <georg.spaethe@example.com> if your input address was "Georg =?ISO-8859-1?Q?SP=E4the?=" <georg.spaethe@example.com>. ALso, as explained by Bill Shannon, you can call getPersonal and getAddress to get the decoded values, so there is no need to fiddle around with MimeUtility yourself.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top