- - PR -
[Java Mail] メールアドレス中の日本語について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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>"となることを 期待しているのですが、どなたか回避策をご存知では ないでしょうか? 以上、よろしくお願い致します。 | ||||||||
|
投稿日時: 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 ] | ||||||||
|
投稿日時: 2006-01-25 04:30
直接的な回答ではないのですが、メール送信したいだけであればJavaMailをそのまま使うよりもCommonsEmailを使うほうがお手軽でよいですよ。
| ||||||||
|
投稿日時: 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 について、調査・学習したいと思います。 皆様、お忙しい中ご回答いただきまして、ありがとうございました。 以上です。 | ||||||||
|
投稿日時: 2006-01-25 11:27
手元にて、アドレス中に日本語があるようなメールを確認してみました。 で、その結果ですが、
てな形式になってますね。 エンコードを行うのは日本語の部分のみ、体裁は自分で整えなければならないのでは? [ メッセージ編集済み 編集者: Edosson 編集日時 2006-01-25 11:40 ] | ||||||||
|
投稿日時: 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