javaでメール受信。muitipartに苦戦(MineMessage利用)

メールっていろんな形式があるんですねぇ。

最近ではWEBサイトみたいなメール届くでしょ。

あれを解析するのが厄介だったんですよ。

今日はがっつり開発ネタ。

投資ネタは微塵も入っていないのであしからず。

htmlmail

.

あなたの投資を自動化します
オートマチックトレード
松村博史

.
人気ブログランキングへ
にほんブログ村

今週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の方はこちら
にほんブログ村 株ブログ 株 自動売買へ       にほんブログ村 先物取引ブログ 先物 システムトレードへ      にほんブログ村 為替ブログ FX システムトレード派へ

オートレ松村 について

オートマチックトレード株式会社 Automatictrade.Inc 機関投資家が行なっている自動売買も個人投資家も必要になる時代がくるとの思いから2006年自動売買関連システム専業のシステム開発会社を立ち上げる。 以来、個人投資家に自動売買サービスを提供する一方、証券会社のサービスの構築、証券会社とAPIを通じたコラボレーション、証券取引所から相談を受けたりなど、自動売買業界の先駆者として活動している。
カテゴリー: 開発 パーマリンク