- PR -

[Java Mail] メールアドレス中の日本語について

1
投稿者投稿内容
tmp
会議室デビュー日: 2006/01/12
投稿数: 11
投稿日時: 2006-01-24 22:47
お世話になっております。
現在、Java Mailを使ってメール送信を行うプログラムを
作成しております。

そのなかで、メールアドレスに日本語を含む文字列を
設定しているのですが、メールクライアント
(Outlook Express など)で受信したメールを見ると、
メールアドレス中の日本語が文字化けてしまいます。

解決策をご存知の方がいらっしゃいましたら
ご教示いただけないでしょうか?

以下、ソースの一部(関連箇所のみ)を載せます。

●Java Mail ソース
// MimeMessage オブジェクト生成
MimeMessage mime = new MimeMessage( session );
// メールアドレス "hoge ほげ<hoge@hoge.co.jp>" を設定
mime.addFrom( InternetAddress.parse("hoge ほげ<hoge@hoge.co.jp>" ) );
// メール送信
Transport.send( mime );

●受信したメールの「送信者」欄
・送信者:hoge {R

Outlook Express でメールのプロパティを
確認したところ、「From: "hoge {R" <hoge@hoge.co.jp>」
となっています。
※ここで"hoge ほげ<hoge@hoge.co.jp>"となることを
期待しているのですが、どなたか回避策をご存知では
ないでしょうか?

以上、よろしくお願い致します。

さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2006-01-24 23:41
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12787&forum=12
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21342&forum=12

[ メッセージ編集済み 編集者: さいくろう 編集日時 2006-01-24 23:42 ]
K
大ベテラン
会議室デビュー日: 2004/04/07
投稿数: 174
投稿日時: 2006-01-25 04:30
直接的な回答ではないのですが、メール送信したいだけであればJavaMailをそのまま使うよりもCommonsEmailを使うほうがお手軽でよいですよ。
tmp
会議室デビュー日: 2006/01/12
投稿数: 11
投稿日時: 2006-01-25 10:57
「さいくろう」様、「moge」様、早速ご教示頂きありがとうございます。

>「さいくろう」様。
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12787&forum=12
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21342&forum=12

ご教示いただいたスレッドの情報で、メールSubject、メール本文の
文字化けは回避できました。ありがとうございました。

しかし、ヘッダFromにつきましては対応できませんでした。

実験用ソースを作成し、実行してみたところ、例外のエラーメッセージに
"Domain name required for sender address"と出ました。
(詳細は下記「実験用ソースコード」をご参照下さい。)

MIMEエンコードしたメールアドレスをFromに指定したので、SMTPサーバ(?)が
「メアドが local-part@domain 形式じゃない!domain指定しろ!」
と言っているのではないかと推測しております。

このあたり、メールアドレスのエンコーディングが可能かどうか、
もう少し調査してみたいと思っています。

もし他に情報がございましたらご教示いただけないでしょうか?


●実験用ソースコード
// メールアドレスをMime エンコード( before -> after に変換)。
// before : hoge ほげ<hoge@hoge.co.jp>
// after : =?iso-2022-jp?B?wBgONIaG9nZS7bLIpCPXevVrNv2HAaX6CyCrGyQYmL==?=
String mail_addrs = MimeUtility.encodeText( "hoge ほげ<hoge@hoge.co.jp>", "iso-2022-jp", "B");
mime.addFrom( InternetAddress.parse(mail_addrs ) );
…中略…
// メール送信
Transport.send( mime );


●実行結果(Exception の printStackTrace )
MAIL FROM:<=?iso-2022-jp?B?wBgONIaG9nZS7bLIpCPXevVrNv2HAaX6CyCrGyQYmL==?=>
553 5.5.4 <=?iso-2022-jp?B?wBgONIaG9nZS7bLIpCPXevVrNv2HAaX6CyCrGyQYmL==?=>... Domain name required for sender address =?iso-2022-jp?B?wBgONIaG9nZS7bLIpCPXevVrNv2HAaX6CyCrGyQYmL==?=
com.sun.mail.smtp.SMTPSendFailedException: 553 5.5.4 <=?iso-2022-jp?B?wBgONIaG9nZS7bLIpCPXevVrNv2HAaX6CyCrGyQYmL==?=>... Domain name required for sender address =?iso-2022-jp?B?wBgONIaG9nZS7bLIpCPXevVrNv2HAaX6CyCrGyQYmL==?=

at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1333)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:906)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:535)
at javax.mail.Transport.send0(Transport.java:151)
at javax.mail.Transport.send(Transport.java:102)
at MailSender.sendMail(MailSender.java:154)
at MailSender.sendMail(MailSender.java:180)
at MailMain.kickMailSender(MailMain.java:74)
at MailMain.main(MailMain.java:20)
QUIT
com.sun.mail.smtp.SMTPSendFailedException: 553 5.5.4 <=?iso-2022-jp?B?wBgONIaG9nZS7bLIpCPXevVrNv2HAaX6CyCrGyQYmL==?=>... Domain name required for sender address =?iso-2022-jp?B?wBgONIaG9nZS7bLIpCPXevVrNv2HAaX6CyCrGyQYmL==?=

at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1333)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:906)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:535)
at javax.mail.Transport.send0(Transport.java:151)
at javax.mail.Transport.send(Transport.java:102)
at MailSender.sendMail(MailSender.java:154)
at MailSender.sendMail(MailSender.java:180)
at MailMain.kickMailSender(MailMain.java:74)
at MailMain.main(MailMain.java:20)


>「moge」様。
> 直接的な回答ではないのですが、メール送信したいだけであればJavaMailをそのまま使うよりも
> CommonsEmailを使うほうがお手軽でよいですよ。

有益な情報をいただき、ありがとうございます。
早速 CommonsEmail について、調査・学習したいと思います。

皆様、お忙しい中ご回答いただきまして、ありがとうございました。

以上です。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-01-25 11:27
引用:

tmpさんの書き込み (2006-01-25 10:57) より:

ご教示いただいたスレッドの情報で、メールSubject、メール本文の
文字化けは回避できました。ありがとうございました。

しかし、ヘッダFromにつきましては対応できませんでした。


手元にて、アドレス中に日本語があるようなメールを確認してみました。

で、その結果ですが、
引用:

From: =?ISO-2022-JP?B?mga********zsfI=?= <hoge@domain.co.jp>


てな形式になってますね。
エンコードを行うのは日本語の部分のみ、体裁は自分で整えなければならないのでは?

[ メッセージ編集済み 編集者: Edosson 編集日時 2006-01-25 11:40 ]
tmp
会議室デビュー日: 2006/01/12
投稿数: 11
投稿日時: 2006-01-25 13:59
「Edosson」様、お忙しい中のご指摘、ありがとうございました。

結論から申し上げますと、「Edosson」様のご指摘の通りでした。
「日本語の部分のみ」MIMEエンコードすることで正常に送信、
及び文字化け回避できました。(下にソースの抜粋を載せます。)

>手元にて、アドレス中に日本語があるようなメールを確認してみました。
>で、その結果ですが、
>引用:
> From: =?ISO-2022-JP?B?mga********zsfI=?= <hoge@domain.co.jp>
>てな形式になってますね。
>エンコードを行うのは日本語の部分のみ、体裁は自分で整えなければならないのでは?

●ソース
// メールアドレス "hoge ほげ<hoge@hoge.co.jp>" の
// 日本語部分のみをMime エンコード。
String mail_addrs_jp = MimeUtility.encodeText( "hoge ほげ", "iso-2022-jp", "B");

// MIMEエンコードした日本語部分とそれ以外を連結したアドレスを設定。
mime.addFrom( InternetAddress.parse( mail_addrs_jp + "<hoge@hoge.co.jp>" ) );
…中略…
// メール送信
Transport.send( mime );

●結果(受信したメールのプロパティでヘッダ等を確認)
送信者 :hoge ほげ
Fromヘッダ:=?iso-2022-jp?B?JlVJTirNruoQgRNXhoQjVgeQjVIRUxTTRs==?= <hoge@hoge.co.jp>


>手元にて、アドレス中に日本語があるようなメールを確認してみました。
>で、その結果ですが、
>引用:
> From: =?ISO-2022-JP?B?mga********zsfI=?= <hoge@domain.co.jp>

なるほど。
上記の件は、確認していませんでした。(確認不足ですね…。)


「さいくろう」様、「moge」様、「Edosson」様。
皆様のおかげを持ちまして本件は解決することができました。
お忙しい中(深夜・早朝・勤務時間中?)にもかかわらず、
本当にありがとうございました。

以上です。
1

スキルアップ/キャリアアップ(JOB@IT)