メール配信
機能
Durian Filter Enterprise Editionでは、メールハンドラとは別にスケジュールされた大量のメールを確実に配信するための配信エンジン・API・管理ツールからなるフレームワークを提供します。
このメールフレームワークには以下の機能があります。
- 宛先アドレスリストに一斉メール配信
- 件名・本文・送信者アドレスの他、送信開始時間が設定可能
- 夜間などの特定時間帯にはメールを送信しない配信時間外期間が設定可能
- 件名・本文を送信者ごとに可変にすることが可能
- キャリアごとの送信速度の設定が可能
- 指定のメールアドレスに送信確認メールを出すことが可能
- 送信メールサーバ(SMTPサーバ)を最大3台まで指定することが可能
- 複数のタスクをスケジュールすることが可能
- 送信中のタスクの停止・再開が可能
- 定期的にタスク作成処理を行うための自動登録機能
これらの機能を使用して、キャリアのメールサーバに負荷をかけずに会員向けメルマガやキャンペーンメールの一斉配信、定期的な自動生成メールの配信などを作成し、高速に配信することが可能です。
構成
メールフレームワークは以下の機能から構成されています。
メール配信エンジン
登録されたメール配信タスクに従って、メールを送信するコアクラスです。
管理ツールで停止・再開を行うことができます。
メール配信ボックス
メール配信タスクを複数集めたクラスです。
メール送信時の各メールのFromアドレスは配信ボックス単位で管理されます。
管理ツールで作成・削除・編集を行うことができます。
メール配信タスク
実際に配信するメールアドレスリスト、送信本文・件名、送信日時などをまとめたものです。
APIから作成・削除・編集を行うことができます。
編集・削除に関しては管理ツールからでも一部行うことができます。
メール自動登録
定期的に繰り返してメール配信タスクを作成したい時に使用する機能です。
メール配信タスクを作成・登録する処理をプログラミングし、それを管理ツールで繰り返し条件を指定・登録することで
作成したプログラムを定期的に実行させることができます。
このうちメール配信エンジン、メール配信ボックスはDurian管理ツールから操作・作成を行います。
メール配信タスクはメールフレームワークが提供しているAPIを使用して操作・作成を行います。
詳細
配信時間外期間設定
送信時間帯を誤って指定したり、サーバの処理能力などの兼ね合いで想定時間以内に送信することができずに夜間、早朝などの時間帯にメールが配信されてしまうのを防ぐ機能です。
これはDurian4管理ツールで設定することができ、送信中にその時間帯に入るとメール配信エンジンは、メールを送信するのを一旦中断します。
その後、配信可能な時間になった時に再び送信を再開します。
SMTPサーバ設定
配信エンジンには使用するSMTPサーバを最大3台まで指定することが可能です。
また、SMTPサーバ共通で携帯電話キャリアごとに10秒間での送信数を設定することが可能です。
SMTPサーバを2台以上設定することによって、送信する速度が向上し、同一IPアドレスからの大量送信を禁止しているような携帯電話キャリアの制限を回避することができます。(※1)
複数台SMTPサーバを設定していて、その内の1台が送信中に使用不可能な状況になった場合は配信エンジンはこれを検知して使用不可能になったSMTPサーバの使用を中断し、使用可能な他のSMTPサーバだけを使用し、送信を続けます。
配信エンジンは5分後に使用不可能になったSMTPサーバから送信を試みて送信可能な場合は、再度そのSMTPサーバを使用して送信を行います。
※1 完全に回避できるわけではないので、10秒間での送信数の設定には十分注意してください
変数設定
メール配信タスクに登録するメールアドレスにはメールアドレスごとに変数を設定できます。
これによって宛先ごとに特定の単語や文章を変えることが可能です。
変数を使用するにはAPIで変数を設定して、メールの件名・本文に${変数名}と記述するとそこに設定した変数値が展開されます。
(例)
本文に こんにちは、${name}さん と記述した場合の、宛先アドレスごとの本文の変化
宛先 | 変数名 | 値 | 変数展開後の本文 |
---|---|---|---|
recipient1@mail.example | name | 山田 | こんにちは、山田さん |
recipient2@mail.example | name | 佐藤 | こんにちは、佐藤さん |
recipient3@mail.example | name | 田中 | こんにちは、田中さん |
※変数についての詳細はAPI、若しくはサンプル集を参照してください。
Durian管理ツールのサポート
Durian管理ツールには
- 配信エンジンの停止/再開
- 配信状況確認メールの送信単位
- 配信状況確認メールの送信先
- SMTPサーバの追加と削除
- キャリアごとの10秒間でのメール送信数設定
- 配信時間外設定
- 配信ボックスの追加/削除/設定変更
- メール配信タスクの設定確認/進捗度合いの確認/停止/再開/削除
の機能があります。
配信エンジンを起動する時には、1台以上のSMTPサーバの指定が必要です。
送信ログ
送信したメールアドレスのログは
${Durianログディレクトリ}/deliveryTask-メール配信ボックスID-メール配信タスクID.log
に出力されます。
フォーマットは、カンマ区切りで
送信日時,メールアドレス,送信結果
となっています。
(例)
2006/09/20 10:14:01,user@mail.example,OK
メール自動登録機能
メールフレームワークが提供するメール配信タスク作成を定期的に実行するための機能です。
メール配信タスクは実行・配信された後は、同じタスクを再度スケジューリングすることはできません。
同じような内容のメールを送信する際でも新たにメール配信タスクを手動で作成する必要があります。
Durianが提供するメール自動登録機能と組み合わせることで定期的にメール配信タスクを繰り返し作成し
スケジューリングすることで、完全に自動化することが可能になります。
開発環境
メールハンドラアプリケーションを開発する際には、コンパイル環境に
- durian4-filter-ee.jar ... Durian Filter Enterprise Edition に含まれるライブラリ
- mail.jar ... JavaMailによって提供されているライブラリ
が必要です。
コーディング例
はじめに
メール配信APIを使用したアプリケーションはJava Servletプログラム上で動作します。
主な流れは
- 配信エンジンの取得
- 配信ボックスの取得
- 配信タスクの作成
- 配信タスクの登録
という順序でプログラムを作成します。
使用するAPIクラス、インターフェースは
- DurianEngine(配信エンジン)
- DeliveryBox(配信ボックス)
- DeliveryTask(配信タスク)
- Recipient(宛先メールアドレス)
- DeliveryTaskRegister(メール自動登録機能から呼び出されるクラス)
です。
※詳しいAPIリファレンスはhttp://durian.symmetric.jp/dev/download/を参照してください
※APIが使用可能なDurianはDurian Enterprise Editionのみです
配信タスクの作成・登録処理
配信エンジン
jp.co.symmetric.durian.mail.delivery.DeliveryEngineが配信エンジンを表すクラスです。
取得するにはjavax.servlet.ServletContextが必要となります。
ServletContext context = getServletContext(); // 配信エンジンの取得 DeliveryEngine deliveryEngine = DeliveryEngine.getDeliveryEngine(context);
配信ボックス
jp.co.symmetric.durian.mail.delivery.DeliveryBoxが配信ボックスを表すインターフェースです。
DeliveryEngineから取得することができます。
配信ボックスの追加はAPIから行うことはできないので、Durian管理ツール上から作成してください。
// 配信ボックスのリストを取得します // この例は事前にDurian管理ツールでIDが0000の配信ボックスを作成してあることが前提です Iterator iterator = deliveryEngine.getDeliveryBoxes(); DeliveryBox deliveryBox = null; while (iterator.hasNext()) { DeliveryBox box = (DeliveryBox) iterator.next(); // 配信ボックスIDを取得 if (box.getId().equals("0000")) { deliveryBox = box; break; } }
配信ボックスからは
- 配信ボックスID
- 配信ボックス名
- 配信タスクから送信するメールのFromアドレス
などが取得できます。
配信タスク
jp.co.symmetric.durian.delivery.DeliveryTaskが配信タスクを表すインターフェースです。
DeliveryBoxから作成することができます。
// 送信日時の作成 Calendar sendCalendar = new GregorianCalendar(2006, Calendar.SEPTEMBER, 1, 16, 0, 0); // 件名・本文の作成 MailMessage body = new MailMessage(); body.setSubject("送信メール件名"); body.setBodyText("本文\r\nこれはサンプル配信です。"); // 配信タスクの作成 DeliveryTask deliveryTask = deliveryBox.createDeliveryTask(sendCalendar.getTime(), body);
作成したばかりのDeliveryTaskには宛て先、タスク名が設定されていません。
DeliveryTaskのsetterメソッドを使用して設定してください。
// 配信タスクに名前を付ける deliveryTask.setName("サンプル配信"); // 宛先の追加 String[] sampleRecipients = {"rcpt1@domain.example", "rcpt2@domain.example"}; for (int i = 0; i < sampleRecipients.length; i++) { // 1件の宛先作成 Recipient recipient = new Recipient(sampleRecipients[i]); // 配信タスクに宛先を追加 deliveryTask.addRecipients(recipient); }
最後に作成した配信タスクを配信ボックスに登録します。
// 配信ボックスに配信タスクの登録 deliveryBox.addDeliveryTask(deliveryTask);
宛て先
jp.co.symmetric.durian.mail.delivery.Recipientが宛て先を表すクラスです。
コンストラクタにはメールアドレスを表すStringクラス、もしくはjp.co.symmetric.durian.mail.MailAddressのインスタンスを指定します。
// 変数指定無しの宛て先を作成 Recipient recipient1 = new Recipient("rcpt1@domain.example");
また、件名や本文に使用する変数をMapで指定することもできます。
// 変数指定有りの宛て先を作成 HashMap variables = new HashMap(); variables.put("name", "山田"); variables.put("company", "株式会社シンメトリック"); Recipient recipient2 = new Recipient("rcpt2@domain.example", variables);
上の例だと、件名・本文に${name}もしくは${company}と記述してある箇所がそれぞれ、${name}は山田、${company}は株式会社シンメトリックに置き換わります。
メール自動登録機能を使用してメール配信タスクの作成・登録処理
Durianメールフレームワークが提供する機能の一つで定期的にメール配信タスクを登録させたい場合に使用します。
特定のクラスを継承したサブクラス内のメソッドでAPIを使用しメール配信タスクを作成・登録するプログラムを作成し、
作成したクラスをDurian管理ツールから登録します。
自動登録クラス本体
jp.co.symmetric.durian.mail.batch.DeliveryTaskRegisterクラスのサブクラスがメール自動登録機能の対象となります。
この抽象メソッドprocessがメールフレームワークから呼び出されます。
public class SampleRegister extends DeliveryTaskRegister { public void process() throws Exception { } }
DeliveryTaskRegisterは処理に必要な情報を取得するためのメソッドも提供します。
配信エンジン取得
public class SampleRegister extends DeliveryTaskRegister { public void process() throws Exception { DeliveryEngine deliveryEngine = getDeliveryEngine(); } }
プログラム起動引数取得
public class SampleRegister extends DeliveryTaskRegister { public void process() throws Exception { String[] args = getArgs(); } }
javax.servlet.ServletContext取得
public class SampleRegister extends DeliveryTaskRegister { public void process() throws Exception { ServletContext context = getServletContext(); } }
自動登録クラス名設定
public class SampleRegister extends DeliveryTaskRegister { public void process() throws Exception { } // getNameメソッドをオーバーライドします public String getName() { return "メール自動登録サンプル"; } }
メール自動登録プログラム
Java Servletでメール配信タスクを登録するのと同じ流れで、ここでもメール配信タスクを登録します。
public class SampleRegister extends DeliveryTaskRegister { public void process() throws Exception { // 配信エンジンの取得 DeliveryEngine deliveryEngine = getDeliveryEngine(); // 配信BOXのリストを取得します // この例は事前にDurian管理ツールでIDが0000の配信BOXを作成してあることが前提です Iterator iterator = deliveryEngine.getDeliveryBoxes(); DeliveryBox deliveryBox = null; while (iterator.hasNext()) { DeliveryBox box = (DeliveryBox) iterator.next(); if (box.getId().equals("0000")) { deliveryBox = box; break; } } // 送信日時の作成(このクラス起動から5分後に送信開始) Date today = new Date(); Date sendDate = new Date(today.getTime() + (1000 * 60 * 5)); // 本文の作成 MailMessage body = new MailMessage(); body.setSubject("定期配信メール"); body.setBodyText("これはメール自動登録機能で作成したサンプル配信です。"); // タスクの作成 DeliveryTask deliveryTask = deliveryBox.createDeliveryTask(sendDate, body); // タスクに名前を付ける deliveryTask.setName("サンプル配信from自動登録クラス"); // 宛先の追加 String[] sampleRecipients = {"rcpt1@domain.example", "rcpt2@domain.example"}; for (int i = 0; i < sampleRecipients.length; i++) { // 1件の宛先作成 Recipient recipient = new Recipient(sampleRecipients[i]); // タスクに宛先を追加 deliveryTask.addRecipients(recipient); } // 配信BOXにタスクの登録 deliveryBox.addDeliveryTask(deliveryTask); } public String getName() { return "メール自動登録サンプル"; } }
メール自動登録クラスの登録・設定
作成したクラスの登録・設定はDurian管理ツールで行います。
(管理ツールスクショかがほしい)
${webapp}/WEB-INF/classes以下のディレクトリに配置してある自動登録クラス(DeliveryTaskRegisterのサブクラス)は自動的にリストに追加されています。
ここでは
- 登録する自動登録クラス
- 起動引数(スペース区切りで複数指定可能)
- 繰り返し有効期間
- 定期繰り返しパターン(一度のみ・毎時・毎日・毎月)
を設定し、作成・変更が可能です。
※詳しくは管理ツールのヘルプを参照してください
注意
APIで操作可能なのは配信タスクに関する部分のみです。
配信ボックスの作成・変更・削除はDurian4管理ツールから行ってください。
詳しくはサンプル集を参考にしてください。
その他
メールフレームワークはDurian Enterprise Editionに含まれるため、インストールと同時に利用することができます。