私たちのアプリケーションは Web フォームからテキストを取得し、適切なユーザーに電子メールで送信します。ただし、悪名高い「スマート クォート」やその他の特殊文字を Word からコピー アンド ペーストすると、事態は複雑になります。
ユーザーが入力します
彼は私に「こんにちは」と言いました。
しかし、メッセージが Outlook 2003 に表示されると、次のようになります。
彼は私にこんにちはと言ったのですか?
このコードは次のとおりです。
Session session = Session.getInstance(props, new MailAuthenticator());
Message msg = new MimeMessage(session);
//removed setting to/from addresses to simplify
msg.setSubject(subject);
msg.setText(text);
msg.setHeader("X-Mailer", MailSender.class.getName());
msg.setSentDate(new Date());
Transport.send(msg);
少し調査した結果、これはおそらく文字エンコーディングの問題であると判断し、UTF-8 に移行しようとしました。したがって、コードを次のように更新しました。
Session session = Session.getInstance(props, new MailAuthenticator());
MimeMessage msg = new MimeMessage(session);
//removed setting to/from addresses to simplify
msg.setHeader("X-Mailer", MailSender.class.getName());
msg.addHeader("Content-Type", "text/plain");
msg.addHeader("charset", "UTF-8");
msg.setSentDate(new Date());
Transport.send(msg);
これで近づきましたが、葉巻はありませんでした:
彼は私に「こんにちは」と言いました。
これがまれな問題だとは想像できません。何が見落とされたのでしょうか。