- - PR -
javamailの文字化け
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-05-18 13:18
はじめまして
mail.jarとactivation.jarを使用してメール送信をしたいと考えています。 しかしsetText(java.lang.String text, java.lang.String charset)の際に文字化けしてしまっているようです。 送信元のJSPでは <%@ page contentType="text/html; charset=utf-8"%> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body> <form name="mailForm" action="/mailSend" method="post"> <input type="text" name="title"/> <textarea name="body" cols="30" rows="5"></textarea> <input type="submit" value="送信"/> </form> </body> </html> としてこれをサーブレット側で request.setCharacterEncoding("utf-8"); String title = request.getParameter("title"); String body = request.getParameter("body"); MimeMessage message = new MimeMessage(session); message.setSubject(title, "iso-2022-jp"); message.setText(body, "iso-2022-jp"); Transport.send(message); として送信しています。少し省略しています。 するとメールを受信した際に末尾に"?"が付加されてしまっています。 そこで charsetを"Windows-31J" request.setCharacterEncoding("Windows-31J"); で行った場合も同様になります。 また message.setText(body, "iso-2022-jp");の部分を message.setText(body, "utf-8");などとした場合は文字化けしませんが受信した際の文字コードがUTF-8やWindows-31Jになります。 http://www.kanzaki.com/docs/jis-mail.html などをみると日本語はiso-2022-jpで扱うべきなのかなと思います。 サーブレット側の実装でutf-8の文字列をiso-2022-jpに変換しなければいけないのかと思い ByteArrayInputStreamとbody.getBytes("iso-2022-jp")などの方法で試みたのですが、正直やり方がよく分かりません。 長文で恐縮ですが、何かご存知であればご教授お願いいたします。 |
|
投稿日時: 2005-05-18 13:27
StringのISO-2022-JPへの変換には、MimeUtilityを使います。
それと、明示的にコンテキストの設定が必要です。 下記のスレッドが参考になるかと。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12787&forum=12 |
|
投稿日時: 2005-05-18 14:46
Edossonさん、返信ありがとうございます。
私の調べ方が甘かったようです。 スレッドを参考にさせていただいて body = MimeUtility.encodeText(body, "iso-2022-jp", "B"); とし メールを受信すると確かに =?iso-2022-jp?B?G… となりますので String encodedBody = MimeUtility.encodeText(body, "iso-2022-jp", "B"); message.setContent(encodedBody, "text/plain; charset=iso-2022-jp"); message.setText(body); としたところ、文字化けしなくなりました。 どうもありがとうございました。 |
1