- - PR -
Servletで自動メールチェック
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-04-23 23:50
こんばんは。
久しぶりに投稿させていただきます。 現在会社でServletを使ったWebの業務ツールを作って運用中なのですが、 自分の勉強を含め、バージョンアップをして、メールの送受信機能を 実装しようと考えております。 そこで質問なのですが、OutLookとかのGUIなメーラー同様に一定時間で新着メールチェック をできないかと考えているのですが、なにか言い方法はあるでしょうか。 JavaScriptを使って指定時間が経過したらsubmitするというのも考えたのですが、 その際にreloadすると入力中などにも指定時間が経過したらsubmitしてしまうので ちょっとエンドユーザにやさしくないかな〜と躊躇しています。 タイマーを実装したマルチスレッドなクラスをsetAttributeで・・・とも考えたのですが、 思いついただけで、何か他の方法はないかと思いまだクラス自体も作っていません・・・。 いい方法がありましたら、ご教授いただけたら幸いです。 よろしくお願いいたします。 | ||||
|
投稿日時: 2003-04-24 11:27
私の場合は自動受信は .forward ファイルを使って行っています。
LinuxやUnixでメールサーバを構築して、メール受信アドレスのホームディレクトリに .forward ファイルを置きます。 その中にコマンドみたいなことも書けるので、メールを受信したら○○する、 といった処理ができます。 なんでも、Servlet(やJava)でやろうとするんじゃなくて、適材適所じゃないでしょうか。 | ||||
|
投稿日時: 2003-04-24 14:22
難しい問題ですね。
yazyさんの案はすばらしい手段ですね。私は知りませんでした。 (qmailの講習会の時に説明を受けてたかもしれませんが・・) ただ、私なら.forwordからJavaのmainを持つApplicationを起動したりということを考えますが、最小限のクラスのみ参照して起動コストを下げれたらいいんですが・・ 私が知っている実装方法としては、Servletのinitで常駐スレッドを起動して、 定期的にJavaMailAPIで参照させるとか、上述のようなアプリをcron登録しておくなど をみたことがあります。 JavaMailAPIがメールクライアントの実装であることが個人的に残念で、 しばしば業務上、メールサーバ機能としてAPサーバを動作したい場面があり、 孫の手が欲しい気持ちになります。 将来的にはJ2EE1.4ではバッチ的なEJBが登場しますし、MDBでメールの受信もできるようです。 この辺に挑戦した方いらっしゃいませんか? | ||||
|
投稿日時: 2003-04-24 21:29
レスありがとうございます。
ちょっと説明が足りなかったようですので、追記します。 会社のある部署だけで使っている業務アプリで、メールサーバなどを管理しているのは、 別部署になるので、メールサーバ自体に仕掛けをすることができません・・・。 どう考えても、Servlet上からメールサーバに新着チェックに行くしかないようで、 やはりzaxx_MDさんのおっしゃる通り、常駐スレッドを用意するしかないでしょうか。 | ||||
|
投稿日時: 2003-04-25 11:09
zaxx_MDさん:
> ただ、私なら.forwordからJavaのmainを持つApplicationを起動したりということを > 考えますが、最小限のクラスのみ参照して起動コストを下げれたらいいんですが・・ ApacheのJamesあたりを見てみると幸せになれるかもしれません。 ジェイさん: > どう考えても、Servlet上からメールサーバに新着チェックに行くしかないようで、 > やはりzaxx_MDさんのおっしゃる通り、常駐スレッドを用意するしかないでしょうか。 百歩譲ってJavaで作るとしてもServletに無理にやらせなくても、と思うんですが。 Applicationですみますよね? それともプロセス立てることもできないサーバで動かすしかないんでしょうか? プロセス立てることができるのならJavaにこだわる必要はないはずで、 もっといろいろできそうですけど。 | ||||
|
投稿日時: 2003-04-25 12:27
>会社のある部署だけで使っている業務アプリで、メールサーバなどを管理しているのは、
>別部署になるので、メールサーバ自体に仕掛けをすることができません・・・。 勘違いしてるようなので、補足しておきます。 メールサーバに仕掛けをすることは不要です。 メール受信者のホームディレクトリにファイルを置くだけです。 そこから、別のサーバ(自分が自由に触れるマシンなど)にメールを飛ばす設定をして 別のサーバで処理することも可能です。 (ホームディレクトリにファイルを置くことも「仕掛け」というのなら、「仕掛け」に なるでしょうけど、私はそういうのは「仕掛け」とは言いません。) ただし、メールサーバがLinuxやUnixの場合です。 Windows系はうちでは扱っていないので知りません。 たぶん今回のには適用できないでしょうけど、他のシステムのときには利用を考えてみてください。 はっきりいって、別スレッド立ててメールが着いていないか監視する...などより、ずっと簡単です。 | ||||
|
投稿日時: 2003-04-25 13:04
クライアントにブラウザを使ったWebシステムの場合、サーバからクライアント に一方的に通知することはできませんよ。 クライアント側から、定期的にリクエストを発行してもらうしかないと思いますが。 もちろん、JavaAppletとか、ActiveXを使えば、それ以外の方法もあるわけですが、 結構大変かと。 簡単なのは、メールの件数を表示するJSPを別フレームに出して、そのフレーム内だけ を定期的にリロードする方法かな。 | ||||
|
投稿日時: 2003-04-25 14:03
JavaScriptでリロードするのもイントラなので問題にならないかもしれませんが、
私は無用なトラフィックをさけたいので、なにかの画面操作をするついでに、 DBかServletContextに格納されている受信状態の情報を一緒にもってきて、 実際のポーリング処理は常駐スレッドで行うのがいいかと思います。 スレッド1つ作るのがそんなに大変ですかねぇ・・ Jamesは前にチェックしたのですが、 当方の本番環境の前提がJRE1.2.2なので導入できなかったんです。 それですっかり忘れてました。 Jamesを導入してメールのリレー設定すると幸せかも?ってことでしょうか・・ | ||||
