Java Sticky Note
java
link
author
|
|
Apache Jamesによるメールフレームワークの導入
2. James が解決する課題
最近,携帯電話向けのWebサイトでは,
本文が空のメールをそのWebサイトの会員
登録用メールアドレスに送信してもらうこ
とで,会員登録を実行するものがあります.
このようなシステムでは,ユーザから送ら
れてきたメールのFromヘッダからユーザのメールアド
レスを取得し,会員データベースに登録する処理が行
われます.このように会員登録をWebではなくメール
で実行するのは,携帯電話の場合面倒となるメールア
ドレスの入力を省く,また入力ミスのない実在のメー
ルアドレスを登録してもらう,といった意味がありま
す.
このようにメールを受け取り,その受け取ったメー
ルに対して何らかの処理(上記の例では,Fromヘッ
ダを取得してデータベースに保存する)を実行するア
プリケーションの作成方法を考えてみます.
プログラムがメールをメールサーバから受け取るに
は,
a) メールスプール上のファイルを監視する
b) メールをPOPサーバから取得する
c) aliasファイルにメール処理プログラムを登録する
などの方法があります.a),b)は,新着メールをプロ
グラムからポーリングして監視し取得するもので,c)
はメールサーバが提供するプログラム実行手段を使用
するものです.ここでは,広く使われているeの方法
についてもう少し考えていきます.
● aliasファイルによるメール処理
メールのaliasファイル(/etc/aliases)に
test: "|/usr/local/majordomo/wrapper"
と設定した場合,testあてにメールが届くと,メール
サーバによりプログラム/usr/local/majordomo/
wrapperが起動され,メールの内容が標準入力を介し
てこのプログラムに受け渡されます.このように標準
入力から受け取ったメールを処理するプログラムを作
成することで,メール処理アプリケーションが実現で
きます.この方法では,メール到着時に直ちにプログ
ラムが起動・処理され,無駄な新着メール監視のポー
リング処理が発生しません.
上記aliasファイルからのプログラムの起動は,SMTP
サーバとしてSendmail
を使用する場合の例で,この
方法によるメール処理アプリケーションは,SMTPサ
ーバに依存する可能性があります.とはいえ,同様の
アプリケーション実行方法は,Sendmail以外に
qmail
などのメールサーバでも実装されており,メールの自
動振り分け等を行なうProcmailや
メーリングリストの
管理プログラムであるMajordomo
など広く使われています.
● Javaによるメール処理
この方法を使用してJava言語でメール処理アプリケ
ーションを作成する場合の問題点をもう少し考えて見
ましょう.上記例では,testあてにメールが到着する
度にwrapperプロセスが起動されます.プロセスの起
動は,OSにとってコストの高い処理です.メール処
理アプリケーションをJava言語で作成する場合は,メ
ール到着のたびにJavaVMが起動されることになりま
すが,現在のJavaVMは起動時にCPUを多く消費し
ます.またHotSpot
のような動的な最適化技術の恩恵
が得られにくくなります.JavaVMをインタプリタモ
ードで起動することで,起動時のCPU消費量を多少
軽減できますが,この場合は起動後の実際のメール処
理でパフォーマンス低下に繋がる可能性があります.
また,前記アプリケーションの例のように,From
ヘッダの内容をデータベースに保存するようなプログ
ラムでは,メールが到着する度にデータベースの接続
処理が発生してしまい効率が悪くなったり,メールが
到着するごとに異なるJavaVMプロセスが動作するた
め,同期処理が必要となった場合その実現が厄介と
なることもあります.これらの問題は,いずれもアプ
リケーションの構造を工夫することで回避することは
可能ですが,本来のビジネスロジックではない余計な
プログラムの開発が必要となってしまいます.
● Jamesのメリット
さてJamesです.Jamesは,100% Javaで記述され
幅広い動作環境をサポートするとともに,Mail処理
を行なうためにMailetフレームワークを提供します.
Mailetフレームワークは,メールの送受信を含むメー
ル処理はもちろん,スレッド・ログの管理など,メー
ル処理に付随する多くの機能も提供しています.これ
によりプログラムの生産性を向上させるとともに,マ
ルチスレッドのサポートで,高い効率のメール処理ア
プリケーションの実行環境を提供します.
このドキュメントに関するご意見、ご要望などはまで。
|
|