- - PR -
JavaMail 文字化け Body → ○, Subject → ×
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-02-28 23:45
うまくいきました(涙
ありがとうございます、coasmさん、Edossonさん。 よくはわかりませんが、activation.jar、mailapi.jarなどのjarファイルを全て最新版(古かったかもしれなかったので)のものにし、再度クラスパスを通してプロジェクトのリビルドしました。 その後実行したところ、件名を日本語表示することができました。 お騒がせしました。 一応最終形のソースをのせておきます。 ----- public static void main(String[] args) { Properties objPrp=new Properties(); objPrp.put("mail.smtp.host","smtp.nifty.com"); // SMTPサーバ名 objPrp.put("mail.host","smtp.nifty.com"); // 接続するホスト名 objPrp.put("mail.smtp.auth", "true"); // POP Before SMTP 対象 // メールセッションを確立 Session session=Session.getDefaultInstance(objPrp,null); // 送信メッセージを生成 MimeMessage objMsg=new MimeMessage(session); session.setDebug(true); try { // 送信先(TOのほか、CCやBCCも設定可能) objMsg.setRecipients(Message.RecipientType.TO,"eeeeeeee@nifty.com"); // Fromヘッダ InternetAddress objFrm=new InternetAddress("YYYYYYYY@nifty.com","Y.Yamada"); objMsg.setFrom(objFrm); // 件名 objMsg.setSubject("メールテスト","iso-2022-jp"); // 本文 objMsg.setText("こんにちは","ISO-2022-JP"); objMsg.setHeader("Content-Type", "text/plain; charset=iso-2022-jp"); objMsg.setHeader("Content-Transfer-Encoding", "7bit"); // メール送信 Transport transport = session.getTransport("smtp"); transport.connect( "smtp.nifty.com", "aaaaaa", // userid "bbbbbb" // password ); transport.sendMessage(objMsg, objMsg.getAllRecipients()); transport.close(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } |
|
投稿日時: 2006-03-01 00:02
残念ながら、それは「たまたま」上手くいっているように見えるだけかもしれません。
メールのプロパティを確認してください。 正しい形は、元データが「メールテスト」なら、 Subject: =?ISO-2022-JP?B?GyRCJWEhPCVrJUYlOSVIGyhC?= です。 ほとんどのメールサーバはRFCに違反したエンコードのメールでも通してくれるので、 変なエンコードをしていても正しく読める場合がけっこうあります。 テスト環境で正しく読めたからといって安心していると、「送り先によっては化ける」 という事態になります。 繰り返しますが、文字エンコードに関しては「読める」「読めない」ではなくて、 「期待されるエンコード」と「実際に送信されるエンコード」から判断するようにしましょう。 |
|
投稿日時: 2006-03-01 00:21
試しにひとつ、表題と本文だけでやってみたら?
ヘッダーには何も入れないの。 ヘッダーにあれやこれや設定を入れるの、このスレでは誰も触れてないし。 |
|
投稿日時: 2006-03-01 00:28
デバッグ文を確認したところ、以下のようにSubjectがなってました。
Subject: =?iso-2022-jp?B?GyRCJWEhPCVrJUYlOSVIGyhC?= 上手くいっているようです。 重ね重ね、ありがとうございます。 > 試しにひとつ、表題と本文だけでやってみたら? > ヘッダーには何も入れないの。 > ヘッダーにあれやこれや設定を入れるの、このスレでは誰も触れてないし。 ヘッダーをはずした(以下をコメントアウト)ソースでも、件名、Bodyともに、 受信メールにて日本語表示を確認できました。 // objMsg.setHeader("Content-Type", "text/plain; charset=iso-2022-jp"); // objMsg.setHeader("Content-Transfer-Encoding", "7bit"); Eclipse でのデバッグ文 ----- Subject: =?iso-2022-jp?B?GyRCJWEhPCVrJUYlOSVIGyhC?= MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: quoted-printable =1B$B$3$s$K$A$O . 250 Mail queued for delivery. |
|
投稿日時: 2006-03-02 00:19
原因がおそらくわかりましたので、一応報告しておきます。
geronimo-j2ee_1.4_spec-1.0.jarというjarファイルが関係あるようです。 自分のEclipseプロジェクトのクラスパスに、上記jarファイルが入っていたのですが、ビルドクラスパスの優先順位が、JavaMailのjarファイルよりも高く、MimeUtilityなどのメソッドを使用する際に、geronimo-j2ee_1.4_spec-1.0側のAPIを使用していたようです。 そのため、なぜかうまくエンコードなどが行えてなかったようです。 優先順位を、JavaMailのjarファイルをgeronimo-j2ee_1.4_spec-1.0より高くすると、メールを正常(文字化け?しない)に送ることができました。 一応報告でした。 |