チュートリアル -- Mail_Queue についてのチュートリアル
シンプルな例を用いた Mail_Queue の使い方
ここでは、例として DB コンテナと mysql データベースを使用します。
mysql データベースに、(キューに追加される)メッセージをストアしておくための
テーブルを作成する必要があります。
例 52-1mysql.sql CREATE TABLE mail_queue (
id bigint(20) NOT NULL default '0',
create_time datetime NOT NULL default '0000-00-00 00:00:00',
time_to_send datetime NOT NULL default '0000-00-00 00:00:00',
sent_time datetime default NULL,
id_user bigint(20) NOT NULL default '0',
ip varchar(20) NOT NULL default 'unknown',
sender varchar(50) NOT NULL default '',
recipient text NOT NULL,
headers text NOT NULL,
body longtext NOT NULL,
try_sent tinyint(4) NOT NULL default '0',
delete_after_send tinyint(1) NOT NULL default '1',
PRIMARY KEY (id),
KEY id (id),
KEY time_to_send (time_to_send),
KEY id_user (id_user)
); |
|
定義が必要なオプションがあります。
それらは 2 回必要となりますので(一回はメッセージをキューへ追加する時、
もう一回はメッセージを送信する時)、
設定ファイルにまとめて記述するのが良いでしょう。
ここでは、その設定ファイルを config.php と名付けます。
例 52-2config.php <?php
require_once "Mail/Queue.php";
// メッセージをストアするためのオプション。
// type は使用しているコンテナで、今のところ 'creole'、'db'、'mdb' そして 'mdb2' が利用可能。
$db_options['type'] = 'mdb2';
// その他は使用しているコンテナのためのオプション。
// これらは db のためのオプション。
$db_options['dsn'] = 'mysql://user:password@host/database';
$db_options['mail_table'] = 'mail_queue';
// これらはメッセージ自身を送信するためのオプション。
// Mail-Classで必要とされるオプションや特に Mail::factory()
// で使用されるオプションがある
$mail_options['driver'] = 'smtp';
$mail_options['host'] = 'your_server_smtp.com';
$mail_options['port'] = 25;
$mail_options['localhost'] = 'localhost'; //オプションの Mail_smtp パラメータ
$mail_options['auth'] = false;
$mail_options['username'] = '';
$mail_options['password'] = '';
?> |
|
それでは、設定が終わったので、使ってみましょう。
最初にメールメッセージを構築し、キューに追加する必要があります。
例 52-3add_message.php <?php
include './config.php';
/* db_options と mail_options をここで使用する */
$mail_queue =& new Mail_Queue($db_options, $mail_options);
$from = 'user@server.com';
$to = "user2@server.com";
$message = 'Hi! This is test message!! :)';
$hdrs = array( 'From' => $from,
'To' => $to,
'Subject' => "test message body" );
/* 有効なメールを構築するため、Mail_mime() を使用する */
$mime =& new Mail_mime();
$mime->setTXTBody($message);
$body = $mime->get();
$hdrs = $mime->headers($hdrs);
/* メッセージをキューに追加する */
$mail_queue->put( $from, $to, $hdrs, $body );
?> |
|
よろしいでしょうか。ここでは、メッセージのキューへの追加をシンプルな方法で行いました。
より高度なオプションの指定も可能ですので、put 関数のドキュメントを参照してください。
次いで、(キューに追加した)メッセージを送信する必要があります。これには、cron を用いて
メッセージを送信するスクリプトを定期的に実行させて行うことが一般的です。
以下が、メッセージ送信を行うシンプルなスクリプトです。
例 52-4send_messages.php <?php
include './config.php';
/* スクリプトがコールされるたびに何通のメールを送信するか */
$max_amount_mails = 50;
/* 設定から db_options と mail_options を再び使用する */
$mail_queue =& new Mail_Queue($db_options, $mail_options);
/* メッセージを実際に送信する */
$mail_queue->sendMailsInQueue($max_amount_mails);
?> |
|
これで完了です。
上記のスクリプトを定期的に実行し、必要なときにメールをキューに追加します。
Mail_Queue v.1.1 以降、preload()
メソッドは、全てのメールを一度にプリロードせずに、
毎回数通だけをメモリにプリロードします。
バッファが空になると、自動的に再びプリロードされます。新しく加えられた
setBufferSize()
メソッドを通してバッファのサイズをセットすることができます。
また、キューにストアされたメールを一通ずつ送信することもできます。
以下がそれを行うシンプルなスクリプトです。
例 52-5send_messages_one_by_one.php <?php
// メモリリソースに応じて内部バッファを
// セットする (数値は、一回に付き、
// 何通のメールがバッファに
// 保持されるかを表す)
$mail_queue->setBufferSize(20);
// キューのサイズを設定する (すなわち、送信するメール数)
$limit = 50;
$mail_queue->container->setOption($limit);
// ストアされたメール分だけループし、それらを送信する
while ($mail = $mail_queue->get()) {
$result = $mail_queue->sendMail($mail);
}
?> |
|