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 :
Exemple 47-1. 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'appelerons config.php.
Exemple 47-2. config.php <?php
require_once "Mail/Queue.php";
// Options pour stocker les messages
// type is the container used, currently there are db and mdb available
$db_options['type'] = 'db';
// 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:
Exemple 47-3. 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 = 'user@server.com';
$destinataire = "user2@server.com";
$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 temp fait par un cron qui execute
régulièrement un script pour envoyer les messages.
Et maintenant ce petit script d'exemple :
Exemple 47-4. 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 executez 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 voyer les emails stockés un par un.
Voici un petit exemple pour illustrer cela :
Exemple 47-5. 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->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);
}
?> |
|