メールハンドラ
メールハンドラとは?
メールハンドラとは、受信メールをWebアプリケーションのリクエスト処理と同じような方法で処理できるようにしたものです。
通常、受信メールを処理する場合には、Webとは別のプロセスを起動したり、POPサーバからメールを取り出す仕組みを作らなければなりませんでした。
メール機能拡張では、Durian Filter Enterprise Edition をインストールするだけでそのような仕組みは全て取り込まれます。
開発者が行うべきことは、受信メールの内容に沿ってアプリケーションコードを記述するだけです。
メール機能拡張の概要図を以下に示します。
DurianメールエンジンはJ2EEアプリケーションサーバ上で動作し、Durian管理ツールで設定された間隔で、指定されたPOP3サーバの指定されたメールアドレスの受信メールを取得します。
受信メールは不要メールを除去するメールフィルタにかけられ、メールフィルタを通過したメールだけがメールアドレスごとに紐付けられるメールハンドラに引き渡されてアプリケーション処理されます。
このメールフィルタとメールハンドラの部分が開発者がプログラミングする部分となります。
POPサーバやチェックするメールアドレス、メールフィルタとメールハンドラの設定はDurian管理ツールから設定します。
開発環境
メールハンドラアプリケーションを開発する際には、コンパイル環境に
- durian4-filter-ee.jar ... Durian Filter Enterprise Edition に含まれるライブラリ
- mail.jar ... JavaMailによって提供されているライブラリ
が必要です。
コーディング例
メールハンドラ
メールハンドラの開発は、jp.co.symmetric.durian.mail.MailHandlerインタフェースを実装したクラスを作ることです。
コード例として単純な自動応答のコードを示します。
package sample; import javax.mail.MessagingException; import jp.co.symmetric.durian.mail.*; public class HelloMailHandler implements MailHandler { // @ public void mailReceived(MailMessage message) throws MessagingException { // A MailMessage replyMessage = message.reply(); // B replyMessage.setBodyText("Durianが返信したメールです。"); // C replyMessage.send(); // D } }
JavaMailパッケージ(javax.mail.*)とメールフレームワーク(jp.co.symmetric.durian.*)の2つのインポートは必須となります。
@jp.co.symmetric.durian.mail.MailHandlerインターフェースを実装したクラスを定義します。
A実装メソッドであるmailReceivedを実装しています。messageに受信メールが引き渡されます。
B〜D受信メールから返信メールを生成し、返信内容をセットし、返信します。
メールハンドラクラス自体は受信メールアドレスに非依存であり、紐付けはメール機能設定画面で行います。
送信に利用されるSMTPサーバの設定も同様にメール機能設定画面で行います。また、受信されたメールは、メールサーバから削除されます。
(!)
メールハンドラ及びメールフィルタのプログラミングにおいてメールを扱う時は常に、jp.co.symmetric.durian.mail.MailMessageクラスを使用します。
メールフィルタ
ある条件にマッチするものだけをメールハンドラの処理対象としたい場合は、メッセージフィルタを使用することができます。
メッセージフィルタは、Durianメールエンジンで受信するすべてのメールに対し適用されます。
メッセージフィルタは、jp.co.symmetric.durian.mail.MailFilterインタフェースを実装したクラスとして作成します。
acceptメソッドでfalseを返した場合はそのメールは破棄され、メールハンドラに処理は委譲されません。
以下のサンプルコードでは、送信者のドメインが docomo.ne.jp の場合のみ、 MailHandlerで処理が行われます。
package sample; import jp.co.symmetric.durian.mail.*; public class DoCoMoOnlyMailFilter implements MailFilter { // @ public boolean accept(MailMessage message) { // A String from = message.getFrom().getAddress(); // B if (from.endsWith("@docomo.ne.jp")) { // C return true; // D } return false; // E } }
@jp.co.symmetric.durian.mail.MailFilterインタフェースを実装したクラスを定義します。
A実装メソッドであるacceptを実装します。meaasgeに受信メールが引き渡されます。
B〜E受信メールのfromを検証しdocomo.ne.jpドメインからのメールに対してはtrueを、そうでないものにはfalseを返します。