| List | James | English |

James - Mailetサンプル - Omikuji

ダウンロード: omikuji.zip

はじめに

アパッチプロジェクトで開発中のJamesメールアプリケーションサーバ配下で動作する、自動メール応答アプリケーションのサンプルです。

Jamesは、SMTP/POP3対応メールサーバであると同時に、ユーザがカスタムメールアプリケーションを組み込むことが可能です。 Jamesのメールアプリケーションは、アパッチが定義したMailetインターフェースを実装したクラス(メーレット)として作成します。

このサンプルアプリケーションは、神社にメールを送るとおみくじが帰ってくる、というものです。 メールによる自動応答アプリケーションの一例です。

Jamesの受信メール処理

筆者はJamesでサンプルを作ってみておもしろいと感じた点があります。 sendmailが内部処理として行っているような受信メールの判断処理を、Jamesはすべてユーザに開放しているという点です。

Jamesは、Matcherというインターフェースを持つクラスで受信メールの条件判定を行い、条件に合致すると、該当のMailetクラスにそのメールの処理をゆだねます。 ここで条件というのは、単なる真偽値ではなく、条件に合致する受取人のリストというかたちで返されます。

たとえば ssjava.net というドメインのメールサーバに一通のメールが届き、宛先が omikuji@ssjava.netpresident@microsoft.com だとします。 Jamesでは、一通のメールを受取人のグループごとに複製分岐して処理を進めます。 デフォルト設定では、もし omikuji という名前のローカルユーザが存在すれば、omikuji@ssjava.net へのコピーがディスクに保存します。 一方、president@microsoft.com へのコピーは管轄外なので破棄します。

Jamesでは、MatcherMailetを自作したり、設定ファイルを編集することで、判定条件、判定順序、処理内容を自由に定義できます。 おみくじメーレットを組み込む場合には、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.xmlJames設定ファイルの例
omikuji.htmlこの説明書

実行方法

おみくじメーレットをJamesメールサーバで動かす手順は次のとおりです。

以下順に手順を説明します。

メーレットJARのインストール

筆者がテストで使用した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の起動

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.