プログラムで受けたメールを転送したところ文字化け。
受けたメールにプログラムで処理した結果を追加して送ろうとしていました。
追加しようとした文字列と元の文字列のエンコードが違うことが原因でした。
今日はがっつり開発ネタ。
投資ネタは微塵も入っていないのであしからず。
.
投資のことを期待されている読者の皆様にはホント申し訳ない。
頭が開発脳になっていて、プログラムがぐるぐる回っているのです。ご容赦を。
.
javaでメールで検索すると送信の例は山ほど出てきます。
しかしながら受信の例はほとんど有りません。皆無に等しい。
今回やりたかったことはメールを受けてゴニョゴニョし、そのメールに処理した結果を付け足してよそに転送するということです。
メールを受ける部分にapache Jamesを採用。
WEBシステム開発で馴染みのあるTOMCATに似た取り回しができます。
TOMCATではservletというものに実現したい機能をプログラムしていきます。
Jamesではmailetというものに実現したい機能をプログラムしていきます。
javaでメールアプリケーションが作りたくなったら便利だと思います。
jamesで受信したメールを作ったmailetに渡すところについてはシグナルメールを注文に変換するためにに書いておきましたので興味がありましたらご覧ください。
.
さぁことは次に進みまして受信したメールの内容を把握すると処理です。
再掲になりますが今回はゴニョゴニョして、その結果をもとのメールに付け足して、指定アドレスに転送するということをしたいわけです。
ゴニョゴニョの部分は今回の記事には関係ないので省きます。
結果を得て、元のメールの本文とこちらで用意した短い文章をつなぎ合わせ転送するところまではなんなく進むことが出来ました。
ところがこのメールを開いてみてみると文字化け。
???????? ?????
のようにハテナマークの羅列になってしまっていました。
この原因がなんでかよくわからず、時間を要したのですが、結局文字コードの違い
javaは文字列はUTF-8で扱っていますが、メールは決まっていない。
iso-2022-jpだったり、shift-jisだったり、UTF-7だったり他にも。
これを一旦、UTF-8にしてやって、こちらで用意した文字列をつなぎあわせることで解決しました。
private void forwordMail(Mail mail, String addtext) throws MessagingException {
// メール転送
String toAddress = "tensousaki@forward.address";
MimeMessage forword = mail.getMessage();
forword.setRecipients(Message.RecipientType.TO, toAddress);
String mailMessage = MailMessage.getMailMessage(mail);
forword.setText("");
try {
String utfMessage = new String(mailMessage.getBytes("UTF-8"), "UTF-8");
forword.setText(addtext + utfMessage, "UTF-8");
} catch (UnsupportedEncodingException e) {
log(e.getMessage());
}
forword.setHeader("Content-Transfer-Encoding", "8bit");
getMailetContext().sendMail(forword);
}
ご参考まで。
今日の記事が参考になったという方はクリックお願いします。
金融・投資 ブログランキングへ
株をされている方はこちら 証券先物の方はこちら FXの方はこちら