ダウンロード: omikuji.zip
アパッチプロジェクトで開発中のJamesメールアプリケーションサーバ配下で動作する、自動メール応答アプリケーションのサンプルです。
Jamesは、SMTP/POP3対応メールサーバであると同時に、ユーザがカスタムメールアプリケーションを組み込むことが可能です。 Jamesのメールアプリケーションは、アパッチが定義したMailetインターフェースを実装したクラス(メーレット)として作成します。
このサンプルアプリケーションは、神社にメールを送るとおみくじが帰ってくる、というものです。 メールによる自動応答アプリケーションの一例です。
筆者はJamesでサンプルを作ってみておもしろいと感じた点があります。 sendmailが内部処理として行っているような受信メールの判断処理を、Jamesはすべてユーザに開放しているという点です。
Jamesは、Matcherというインターフェースを持つクラスで受信メールの条件判定を行い、条件に合致すると、該当のMailetクラスにそのメールの処理をゆだねます。 ここで条件というのは、単なる真偽値ではなく、条件に合致する受取人のリストというかたちで返されます。
たとえば ssjava.net というドメインのメールサーバに一通のメールが届き、宛先が omikuji@ssjava.net と president@microsoft.com だとします。 Jamesでは、一通のメールを受取人のグループごとに複製分岐して処理を進めます。 デフォルト設定では、もし omikuji という名前のローカルユーザが存在すれば、omikuji@ssjava.net へのコピーがディスクに保存します。 一方、president@microsoft.com へのコピーは管轄外なので破棄します。
Jamesでは、MatcherやMailetを自作したり、設定ファイルを編集することで、判定条件、判定順序、処理内容を自由に定義できます。 おみくじメーレットを組み込む場合には、James標準のRecipientIsマッチャーで神社宛のアドレスかどうか判断し、合致するメールがOmikujiメーレットに渡されるように設定します。 これに合致しない受取人があれば、神社宛のアドレスが除外され次の判別処理に進みます。
Jamesメールサーバに次のようなメールが届いたとします。
MAIL FROM: someone@somewhere <- SMTP envelope RCPT TO: omikuji@ssjava.net RCPT TO: president@microsoft.com From: someone@somewhere <- message headers To: omikuji@ssjava.net To: president@microsoft.com Subject: Test Test mail to omikuji mailet. <- message body
すると、RecipientIsマッチャーの判定の結果、メールは複製され、処理は二つの道筋に分岐します。
MAIL FROM: someone@somewhere
RCPT TO: omikuji@ssjava.net
From: someone@somewhere
To: omikuji@ssjava.net
To: president@microsoft.com
Subject: Test
Test mail to omikuji mailet.
MAIL FROM: someone@somewhere
RCPT TO: president@microsoft.com
From: someone@somewhere
To: omikuji@ssjava.net
To: president@microsoft.com
Subject: Test
Test mail to omikuji mailet.
左のメッセージはおみくじメーレットが自動返信し、右のメッセージは破棄されます。
Omikuji.java おみくじメーレットのソースファイル omikuji.jar メーレットを納めたJARファイル ← 削除(コンパイルしてください) config.xml James設定ファイルの例 omikuji.html この説明書
おみくじメーレットをJamesメールサーバで動かす手順は次のとおりです。
以下順に手順を説明します。
筆者がテストで使用したJames 2.1.2のドキュメントを読むと、メーレットJARの追加方法は二つあります。 ひとつはJamesをソースから構築する際に自分のメーレットを組み込む方法です。 筆者はこの方法は試してません。
もうひとつの方法は、Jamesのインストールディレクトリ(以下<james-home>)直下のlibディレクトリにメーレットJARを入れる方法です。 JavaMailのJARなどもいっしょに入れる必要があります。 筆者はこの方法を試してみましたがうまくいきませんでした。
筆者が試してみてうまくいったのは、<james-home>/appsに置かれたjames.sarにメーレットを挿入する方法です。 しかしこの方法はドキュメントには書かれておらず、問題のない方法なのかどうかわかりません。
メーレットの配備方法は今後大幅改訂になるそうです。 Jamesの新バージョンでは大きく変わるかもしれません。 詳細はJamesのドキュメントをごらんください。
Jamesにメーレットに関する情報を知らせるには<james-home>/apps/james/SAR-INF/config.xmlを編集します。 Jamesインストール直後の状態("localhost"で動作)の設定ファイルにメーレット情報を加えた見本ファイルを用意していますので、参考にしてください。
まず、<mailetpackages>要素に次の行を追加して、おみくじメーレットのパッケージ名を指定します。
<mailetpackage>kobu.omikuji</mailetpackage>
次に<processor name="transport">要素に次の要素を追加してください。 RecipientIsに合致するメールアドレスに対してOmikujiメーレットを起動する指定です。
<mailet match="RecipientIs=omikuji@localhost" class="Omikuji">
<jinja>omikuji@localhost</jinja>
</mailet>
上記の要素は次の要素の直後に置いてください。
<mailet match="RecipientIsLocal" class="LocalDelivery"/>
こうすると、正規のローカルユーザへ配信が済んだ後、存在しないローカルユーザ宛てのメールのエラー処理が行われる前にメーレットが実行されます。
この例では神社のアドレスは「omikuji@localhost」となっています。 インターネット上の正規のメールサーバで実行する場合は「localhost」をそのメールサーバ名に変更してください。
Jamesサーバを再起動してください。
あなたのメールアドレスからomikuji@localhostへメールを出してください。
返信メールを読んでください。
From: omikuji@localhost To: test@localhost Subject: Your fortune: Daikichi Congratulations! You have a best luck today.
おみくじの返信は大吉、吉、凶の三つです。
ソースファイルのリコンパイル、JARファイルの作成は次のとおりです。
javac -classpath activation.jar;mail_1_3.jar;james.jar -d . Omikuji.java jar cf omikuji.jar kobu
上記はWindowsの場合で、必要なJARファイルがソースと同じフォルダにあるという前提です。 別のフォルダにある場合はその場所を指定してください。 また、UNIXではJARファイルの区切りはセミコロン(;)でなくコロン(:)です。
初版: 2003/07/09
更新: 2003/07/11
制作: 荒井文吉
提供: 横浜工文社(www.kobu.com)
公開するサンプルは試作品で、完全なものではありません。
サンプルの転載はご遠慮ください。
Copyright © 2003 Kobu.Com. All rights reserved.