8

メールを送信するコードは次のとおりです。

    MimeMessage msg = new MimeMessage(session);
    msg.setSubject("subject", "UTF-8"); // here you specify your subject encoding
    msg.setContent("yourBody", "text/plain; charset=utf-8");

    msg.setFrom("senderAddress");
    msg.addRecipient(Message.RecipientType.TO, new InternetAddress(address));
    Transport.send(msg);

私の問題は、件名をutf-8でエンコードしたので、受信者アドレスをエンコードするにはどうすればよいかということです。new InternetAddress(address)

4

2 に答える 2

14

メールアドレスは RFC822 標準に従う必要があります

JavaMail の MimeMessage はInternetAddressを使用します。

このクラスは、RFC822 の構文を使用してインターネット電子メール アドレスを表します。一般的なアドレス構文は、"user@host.domain" または "Personal Name < user@host.domain >" の形式です。

RFC822 形式は次のように述べています。

RFC 822 では文字レパートリーがASCIIに制限されていることに注意してください。実際には、他の文字 (ä や é など) は通常、コメント (およびコメント) に使用される引用符付き文字列内で使用できますが、適切なアドレスでは使用しないでください。

住所の個人名は、さまざまな文字セットをサポートしています

InternetAddress は個人名を使用します。

名前に非 US-ASCII 文字が含まれている場合、名前は RFC 2047 に従って指定された文字セットを使用してエンコードされます。名前に US-ASCII 文字のみが含まれている場合、エンコードは行われず、名前はそのまま使用されます。

エンコーディング用の文字セットを設定するには、InternetAddress#constructorがあります。ソースを見る:

public InternetAddress(String address, String personal, String charset)
        throws UnsupportedEncodingException {
    this.address = address;
    setPersonal(personal, charset);
}

setPersonal(..)を呼び出すだけなので、最も便利な方法を選択してください。

文字セットを検索するには、Charset.forName()を使用します。

于 2012-05-31T09:40:16.633 に答える