- PR -

javamailの文字化け

1
投稿者投稿内容
atuko
会議室デビュー日: 2005/05/03
投稿数: 2
投稿日時: 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")などの方法で試みたのですが、正直やり方がよく分かりません。


長文で恐縮ですが、何かご存知であればご教授お願いいたします。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2005-05-18 13:27
StringのISO-2022-JPへの変換には、MimeUtilityを使います。
それと、明示的にコンテキストの設定が必要です。
下記のスレッドが参考になるかと。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12787&forum=12
atuko
会議室デビュー日: 2005/05/03
投稿数: 2
投稿日時: 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

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