01
Jun

Controler les mails envoyés par Drupal

Dans certains cas on pourrait vouloir outrepasser la façon dont Drupal envoie les mails.
Dans mon cas, j'avais besoin de pouvoir utiliser un webservice pour envoyer les mails. Dans d'autres cas on pourrait vouloir simplement utiliser un serveur SMTP pour l'envoie de mails (Au passage le module PHPMailer est fait pour ça).

On peut aussi simplement vouloir mieux controler les mails qui sortent de Drupal. (Empêcher certains mails de sortir, ajouter un lien dans le mail, un mot dans le sujet, etc...)...

Dans cet article je vais tenter d'expliquer comment avec un simple module on peut contrôler la mecanique d'envoie de mails.

Le principe est très simple : on va utiliser la fonction drupal_mail_wrapper(). Par contre pour pouvoir l'utiliser, il faut indiquer à Drupal que l'on souhaite outrepasser la mecanique habituelle.
Ceci se fait simplement en ajoutant le chemin du module dans la variable de configuration "smtp_library" :

<?php
$smtp_path = drupal_get_filename('module', 'mon_module');
variable_set('smtp_library', $smtp_path);
?>

À ce niveau Drupal cherchera la fonction drupal_mail_wrapper() à chaque envoi de mail.

Utilisation de la fonction drupal_mail_wrapper() :
<?php
function drupal_mail_wrapper($message) {
    //Le paramètre $message contient comme sont nom l'indique le message
    $id       = $message['id'];
    $to       = $message['to'];
    $from     = $message['from'];
    $language = $message['language'];
    $subject  = $message['subject'];
    $body     = $message['body'];
    $headers  = $message['headers'];

    //Envoie du mail à l'aide de la fonction mail() de PHP
    return mail($to, $subject, $body);
}
?>

 




Commentaires

Par Neeux  Le mer, 06/01/2011 - 10:53
Arrg... Merci beaucoup je viens de comprendre pourquoi la fonction drupal_mail_wrapper ne fonctionnait pas chez moi....

Ajouter un commentaire

Type the characters you see in this picture. (verify using audio)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated. Not case sensitive.