JavaMailを使うとFrom:とかTo:とかのアドレスはInternetAddressクラスを使うことになるのだけど、名前の部分とかエンコードとかどうなるのかjavadocにはあまり明確に書かれていない感じだったのでテストした結果を記録しておく。
結果はこんな感じ。
コンストラクタに渡す文字列 | toString() | toUnicodeString() | getPersonal() | getAddress() |
---|---|---|---|---|
test@example.com | test@example.com | test@example.com | null | test@example.com |
=?ISO-2022-JP?B?GyRCRnxLXDhsTD4bKEI=?= <test@example.com> | (同左) | "日本語名" <test@example.com> | 日本語名 | test@example.com |
"日本語名" <test@example.com> | (同左) | (同左) | 日本語名 | test@example.com |
test@example.com ("日本語名") | "日本語名" <test@example.com> | (同左) | 日本語名 | test@example.com |
つまり:
- 一番始めに"アドレス (名前)"形式は"名前 <アドレス>"形式に正規化される。
- toString()はこの状態の文字列を返す。MIMEデコードはしない。
- toUnicodeString()は名前のMIMEデコードをして、""でくくった形を返す。
- getPersonal()はMIMEデコードをして、""でくくらない形を返す。
- 名前がなければgetPersonal()はnullを返す。
ということが分かった。まあ特に驚きはないか。