- - PR -
MimeMessageの文字化けについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-12-09 21:48
MimeMessageでのメール送信で文字化けがおきて困っています。
メッセージ本文はEUC(msg.setText()の直前にsun.misc.HexDumpEncoderで確認)ですが これを送信すると受信したメッセージが変な化け方をしています。 半角は「===」を送信すると「=3D=3D=3D」になります。 全角は「有限会社」を送信すると「=CD=AD=B8=C2=B2=F1=BC=D2」とか 「=1B$BM-8B2q<R=1B(B」に化けてます。 色々と試して見ましたが解決できず困っています。 どうかお助け下さい。 【送信テキスト】 ======== 有限会社 【直前のダンプ】 0000: 3E 20 3D 3D 3D 3D 3D 3D 3D 3D 0D 0A 3E 20 CD AD > ========..> .. 0010: B8 C2 B2 F1 BC D2 20 0D 0A 3E 0D 0A 0A ...... ..>... 【試行1】 String encodedBody = MimeUtility.encodeText(message, "ISO-2022-JP", "B"); msg.setContent(encodedBody, "text/plain; charset=ISO-2022-JP"); 【受信メール抜粋】 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit =?ISO-2022-JP?B?PiA9PT09PT09PQ0KPiAbJEJNLThCMnE8UhsoQiANCj4NCgo=?= 【試行2】 String encodedBody = MimeUtility.encodeText(message, "ISO-2022-JP", "B"); msg.setContent(encodedBody, "text/plain; charset=ISO-2022-JP"); msg.setText(message); 【受信メール抜粋】 Content-Type: text/plain; charset=EUC-JP-LINUX Content-Transfer-Encoding: quoted-printable > =3D=3D=3D=3D=3D=3D=3D=3D > =CD=AD=B8=C2=B2=F1=BC=D2=20 【試行3】 String encodedBody = MimeUtility.encodeText(message, "ISO-2022-JP", "B"); msg.setContent(encodedBody, "text/plain; charset=ISO-2022-JP"); msg.setText(message,"ISO-2022-JP"); 【受信メール抜粋】 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: quoted-printable > =3D=3D=3D=3D=3D=3D=3D=3D > =1B$BM-8B2q<R=1B(B=20 【試行4】 msg.setText(message,"ISO-2022-JP"); 【受信メール抜粋】 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: quoted-printable > =3D=3D=3D=3D=3D=3D=3D=3D > =1B$BM-8B2q<R=1B(B=20 |
|
投稿日時: 2005-12-10 00:25
結論から言いますと、どれも「文字化け」していません。
すべて、【送信テキスト】を指定した通りにエンコードしたものになっています。 【試行1】 メールの内容は、送信テキストをISO-2022-JPでBエンコードしたものです。 文字化けはありません。 何故にメールの本文をMimeEncodeするのか理解に苦しみますが・・・ 【試行2】 setContent()した後で更にsetText()しているのが謎ですが、これは、後で実行したsetText()が有効です。 setText()でエンコードを指定しないと、プラットフォームのデフォールトエンコーディンに なってしまいます。 メールの内容は、【送信テキスト】をEUCでquoted-printableにエンコードしたものです。 文字化けはありません。 【試行3】 試行2と同様に、setContent()が無駄になっています。 メールの内容は、【送信テキスト】をISO-2022-JPでquoted-printableにエンコードしたものです。 文字化けはありません。 【試行4】 試行3から、無駄なsetContent()を除いたもの。 メールの内容は、【送信テキスト】をISO-2022-JPでquoted-printableにエンコードしたものです。 文字化けはありません。 これは、コーディングとして「正解」です。 特に指定しないと quoted-printable になってしまうのは、javamailの仕様です。 困ったものですが、ある意味では「RFCを正しく実装している」という意見もあるようで・・・ 日本語メールの標準 "charset=ISO-2022-JP" "Content-Transfer-Encoding: 7bit" で 送信して欲しければ、そのように指定してやらないといけません。 msg.setText(message,"ISO-2022-JP"); msg.setHeader("Content-Transfer-Encoding", "7bit"); まあ、【試行1】 は論外、【試行2】もメールとしては非標準ですが、 【試行3】【試行4】のメールを正しく表示できないのであれば、 それはメーラの方が悪いと言ってもかまわないでしょう。 |
|
投稿日時: 2005-12-10 16:44
ありがとうございます。
試行の順番(番号)が間違っていました。 最初は試行4だったのですが、受信メールが「=3D...」となっていて 色々なやり方を試してみました。 「=3D...」も正しい形式だったのですね。 教えて頂いた msg.setText(message,"ISO-2022-JP"); msg.setHeader("Content-Transfer-Encoding", "7bit"); でうまくいきました |
1