[Java] JavaMailで送信したメール本文の末尾に"?"が付く | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

先日、JavaMail で送信したメールの本文の末尾に"?"が付くという不可解な現象を発見しました。

.
.
.
Properties props = System.getProperties();
props.put("mail.smtp.host","xxxxxx.xxxxxx.co.jp");
Session session = Session.getDefaultInstance(props,null);
MimeMessage message = new MimeMessage(session);
.
.
.
message.setText(text, "iso-2022-jp");
.
.
.
Transport.send(mimeMessage);

メール本文は MimeMessage.setText で本文とエンコーディングを指定してセットします。

一般的に日本語メールの場合、JIS(iso-2022-jp)を指定しますが、JavaMail の JISエンコーディングに問題があるため、上記のような現象が起こるようです。

この現象は、Java の標準機能を利用して JISエンコーディングを行うことによって解消しました。

message.setText(new String(text.getBytes("iso-2022-jp")), "iso-2022-jp");

ただ、この現象は Thunderbird など、一部のメーラーで受信した場合にしか起こりません。

そのため、テストで見逃す可能性大です。

すべてのメーラーで受信テストを行うのは実質的に不可能かもしれませんが、受信するメーラーがある程度絞れる場合は、それらすべてのメーラーで受信テストをしておいたほうがよさそうですね。