A példában az e-mailek tárolásához egy adatbázis-alapú konténert használunk, MySQL adatbázissal. Néhány táblát létre kell hoznunk a kiküldendő levelek tárolásához:
mysql.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 varchar(50) NOT NULL default '', 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) );
Elsőként néhány opciót kell definiálnunk. Mivel ezekre a beállításokra kétszer van szükség (egyszer a levelek hozzáadásánál, egyszer a levelek kiküldésénél), jó ötlet őket egy közös konfigurációs állományban tárolni. Adjuk neki például a config.php fájlnevet!
config.php
<?php
require_once "Mail/Queue.php";
// az üzenetek tárolásával kapcsolatos beállítások
// a type a használt konténer típusa, jelenleg db és mdb áll rendelkezésre
$db_options['type'] = 'db';
// a következő beállítások pedig a választott konténerre vonatkoznak
// a db konténer néhány opciója:
$db_options['dsn'] = 'mysql://felhasználónév:jelszó@hoszt/adatbázis';
$db_options['mail_table'] = 'mail_queue';
// a következő konfigurációs beállítások a levelek kiküldésére vonatkoznak
// ezek tulajdonképpen a Mail osztály beállításai, a Mail::factory() függvény igényli őket
$mail_options['driver'] = 'smtp';
$mail_options['host'] = 'smtp_szerver_cime.com';
$mail_options['port'] = 25;
$mail_options['localhost'] = 'localhost'; // opcionális Mail_smtp paraméter
$mail_options['auth'] = false;
$mail_options['username'] = '';
$mail_options['password'] = '';
?>
Ezzel végeztünk a konfigurálással, próbáljuk is ki. Össze kell állítanunk egy e-mail üzenetet, majd hozzáadni a várakozósorhoz:
add_message.php
<?php
include './config.php';
/* a konfigurációs állományban tárolt db_options és mail_options beállításokat használjuk */
$mail_queue =& new Mail_Queue($db_options, $mail_options);
$felado = '[email protected]';
$cimzett = "[email protected]";
$uzenet = 'Hello! Ez egy teszt üzenet!! :)';
$fejlecek = array( 'From' => $felado,
'To' => $cimzett,
'Subject' => 'a teszt üzenet tárgya' );
/* a Mail_MIME osztályt használjuk érvényes e-mail tartalom előállításához */
$mime =& new Mail_mime();
$mime->setTXTBody($uzenet);
$tartalom = $mime->get();
$fejlecek = $mime->headers($fejlecek);
/* Hozzáadjuk a levelet a várakozási sorhoz */
$mail_queue->put( $felado, $cimzett, $fejlecek, $tartalom );
?>
Ez volt az e-mail-ek egyszerű hozzáadásának módja. Sokkal összetettebb lehetőségeink is vannak, bővebb információ erről a put() függvény leírásában érhető el. Most ki kell küldenünk az üzeneteket. Ez többnyire egy cron job segítségével működik, ami bizonyos időközönként lefut a háttérben és meghívja az alábbi (példa) szkriptünket:
send_messages.php
<?php
include './config.php';
/* Mennyi e-mailt szeretnénk kiküldeni a szkript lefutásakor */
$max = 50;
/* ismét a konfigurációs fájlunkban beállított db_options és mail_options
beállításokat használjuk */
$mail_queue =& new Mail_Queue($db_options, $mail_options);
/* az üzenetek tényleges kiküldése */
$mail_queue->sendMailsInQueue($max);
?>
Ennyi az egész. Hívjuk meg a fenti szkriptet újra és újra bizonyos időközönként, így a várakozólistában lévő e-mailek sorra kiküldődnek majd.
A Mail_Queue csomag v1.1-es verziójától kezdődően a preload() metódus nem tölti be az összes e-mailt a memóriába, csak néhányat minden alkalommal. Ha a puffer kiürül, újból automatikusan megtöltésre kerül. A puffer méretét az új setBufferSize() metódus segítségével állíthatjuk be.
Az eltárolt e-maileket egyesével is kiküldhetjük. A következő szkript erre mutat példát:
uzenetek_kikuldese_egyesevel.php
<?php
// állítsuk be a belső pufferméretet a memória-erőforrásainknak
// megfelelően (a szám azt adja meg, hogy egyidőben maximum
// mennyi üzenet lehet a memóriában a pufferünkben).
$mail_queue->setBufferSize(20);
// várakozási sor méretének beállítása (a küldendő levelek száma)
$korlat = 50;
$mail_queue->setOption($korlat);
// egy ciklussal végigmegyünk az eltárolt e-maileken
// és kiküldjük őket
while ($mail = $mail_queue->get()) {
$result = $mail_queue->sendMail($mail);
}
?>