メールっていろんな形式があるんですねぇ。
最近ではWEBサイトみたいなメール届くでしょ。
あれを解析するのが厄介だったんですよ。
今日はがっつり開発ネタ。
投資ネタは微塵も入っていないのであしからず。
.
あなたの投資を自動化します
オートマチックトレード
松村博史
・
今週2回目の開発ネタ。
投資のことを期待されている読者の皆様にはホント申し訳ない。
頭が開発脳になっていて、プログラムがぐるぐる回っているのです。ご容赦を。
.
javaでメールで検索すると送信の例は山ほど出てきます。
しかしながら受信の例はほとんど有りません。皆無に等しい。
今回やりたかったことはメールを受けて内容を解析するということです。
メールを受ける部分にapache Jamesを採用。
メールを受信するのなら既存のメールボックスにメールを取得(ポーリング)しに行くサーバーサイドプログラムも組めなくも無いです。
ですがこれだと無駄にネットワークトラフィックが増えるので却下しました。
JamesはWEBシステム開発で馴染みのあるTomcatに似た取り回しができます。
Tomcatではservletというものに機能をプログラムしていきます。
Jamesではmailetというものに機能をプログラムしていきます。
javaでメールアプリケーションが作りたくなったら便利だと思います。
jamesで受信したメールを作ったmailetに渡すところについてはシグナルメールを注文に変換するためにに書いておきましたので興味がありましたらご覧ください。
.
次に進みまして受信したメールの内容を把握するところで罠がありました。
単純なメールで実験していたときは見事に成功してくれていました。
ところがメーラーからhtmlメールを送ると失敗。
どうやら本文の文字列が取得できていないようです。
原因はmultipart(マルチパート)。
単純なメールではMimeMassageからgetContent()してStringに変換すればメールの内容が取得出来ました。
public static String getMailMessage(org.apache.mailet.Mail mail) throws MessagingException {
String mailMessage = mail.getMessage().getContent().toString();
return mailMessage
}
Exceptionのこととか書いていませんのでご自身でお願いします。
ところがマルチパートだとgetContent()した結果がStringではなくMultipartになります。
このことを知らなくてなかなか前に進めませんでした。
マルチパートには添付ファイルも含められます。
ですが、今回は本分の文字列だけで十分なのでtext/plainの部分だけ持ってくればいいです。
以下のコードでうまくいきました。
public static String getMailMessage(Mail mail) throws MessagingException {
String mailMessage = "";
try {
if (mail.getMessage().isMimeType("text/plain")) {
mailMessage = mail.getMessage().getContent().toString();
} else {
MimeMultipart content = (MimeMultipart) mail.getMessage().getContent();
for (int i = 0; i < content.getCount(); i++) {
BodyPart bp = content.getBodyPart(i);
if (!bp.isMimeType("text/plain"))
continue;
mailMessage = bp.getContent().toString();
break;
}
}
} catch (IOException e1) {
}
return mailMessage;
}
ここをクリアしたら、また次でハマったんですけどね。
それは別の機会に。
.
.
いつもありがとうございます。ランキングに参加しています。
ご協力いただけると嬉しいです。
金融・投資 ブログランキングへ
株をされている方はこちら 証券先物の方はこちら FXの方はこちら