Tutorial

Tutorial – Un tutorial pour Mail_Queue

Utilisation de Mail_Queue avec un exemple simple

Nous utilisons pour cet exemple le db-container et une base de donnée mysql. Vous devez créer quelques tables dans cette base de donnée pour stocker les messages :

mysql.sql

#
# `mail_queue`
#

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)
);

#
# `mail_queue_seq`
#

CREATE TABLE mail_queue_seq (
id int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY  (id)
);

#
# Données pour `mail_queue_seq`
#

INSERT INTO mail_queue_seq (id) VALUES (1);

Premièrement, il faut définir certaines options. Comme vous avez besoin d'eux deux fois (une fois pour ajouter des messages, une fois pour envoyer les messages), il est toujours bon de les ajouter à un fichier de configuration. Nous l'appellerons config.php.

config.php

<?php

require_once "Mail/Queue.php";

// Options  pour stocker les messages
// Le type, c'est le container utilisé, 
// pour le moment on peut choisir entre 'creole', 'db', 'mdb' et 'mdb2'
$db_options['type']       = 'mdb2';
// the others are the options for the used container
// here are some for db
$db_options['dsn']        = 'mysql://user:password@host/database';
$db_options['mail_table'] = 'mail_queue';

// Voici les options pour envoyer les messages eux-mêmes
// ce sont les options requises pour la classe mail,
// particulièrement utilisé pour Mail::factory()
$mail_options['driver']   = 'smtp';
$mail_options['host']     = 'votre_serveur__smtp.tld';
$mail_options['port']     = 25;
$mail_options['localhost'] = 'localhost'//optional Mail_smtp parameter
$mail_options['auth']     = false;
$mail_options['username'] = '';
$mail_options['password'] = '';

?>

Voilà la configuration faite, passons à l'utilisation. Premièrement il faudra construire un message et l'ajouter à la file:

add_message.php

<?php
include './config.php';
/* nous utilisons db_options et mail_options ici */
$file_denvoi_de_mail =& new Mail_Queue($db_options$mail_options);

$from '[email protected]';
$destinataire "[email protected]";
$message 'Hi! This is test message!! :)';

$entetes = array( 'From'    => $from,
   
'To'      => $destinataire,
   
'Subject' => "Message de test"  );

/* nous utilisons Mail_mime() pour construire un email valide */
$mime =& new Mail_mime();
$mime->setTXTBody($message);
$corps $mime->get();
$entetes $mime->headers($entetes);


/* Placer le message dans la file */
$file_denvoi_de_mail->put$from$destinataire$entetes$corps );

?>

Ok, là nous avons utilisé la voie simple pour ajouter un message... Il y a des options plus avancées, consultez la documentation des fonctions d'ajout pour cela. Maintenant nous devons envoyer des messages. C'est la plupart du temps fait par un cron qui exécute régulièrement un script pour envoyer les messages. Et maintenant ce petit script d'exemple :

send_messages.php

<?php
include './config.php';

/* Combien de courrier pourrons-nous envoyer chaque appel du script */
$nombre_max_de_mails 50;

/* Nous utilisons de nouveau db_options et mail_options de la config */
$file_denvoi_de_mail =& new Mail_Queue($db_options$mail_options);

/* Envoi effectif des messages */
$file_denvoi_de_mail->sendMailsInQueue($nombre_max_de_mails);
?>

Voilà c'est fait. Maintenant exécutez le script régulièrement et ajoutez vos mails à la file .

Depuis Mail_Queue v.1.1, la méthode preload() peut ne plus précharger TOUS LES courriers dans la mémoire, mais juste quelques uns à la fois. Quand le buffer est vide, il est automatiquement re-rempli. Vous pouvez fixer la taille du buffer par l'intermédiaire de la nouvelle méthode setBufferSize().

Vous pouvez aussi envoyer les emails stockés un par un. Voici un petit exemple pour illustrer cela :

send_messages_one_by_one.php

<?php
/* fixe la taille du tampon interne en fonction        */
/* des ressources mémoire disponible sur la machine    */
/* Le nombre indique la quantité maximum de mail qu'on */
/* peut placer dans la file.                           */

$file_denvoi_de_mail ->setBufferSize(20);

// Donnez une taille à la file
// (p.e. le nombre de mail à envoyer)
$limite 50;
$file_denvoi_de_mail->container->setOption($limite);
/* Boucler sur le lot de mail et les envoyer           */
while ($mail $file_denvoi_de_mail->get())
{
 
$result $file_denvoi_de_mail->sendMail($mail);
}
?>