Envoyer des emails depuis un module

Envoyer des emails depuis un module

22 Feb 2010 |  Drupal

Envoyer des emails depuis votre module est simple à faire, il suffit de déclarer le hook_mail() puis de faire appel à la fonction drupal_mail(). Vous trouverez ci-dessous, un exemple de code que vous pouvez intégrer dans votre module :

Dans un premier temps nous allons déclarer le hook_mail qui va être utilisé pour construire l’email avec la configuration que nous avons choisie et les paramètres que nous allons passer via la fonction drupal_mail. Vous pouvez spécifier plusieurs options : $key : Identifiant unique pour votre email
$message : Tableau de valeurs contenant les informations relatives à l’email
- ‘id’ : Identifiant pour distinguer l’email envoyé
- ‘to’ : L’adresse du destinataire
- ‘subject’ : Le sujet de votre email - ‘body’ : Le contenu de votre email
- ‘from’ : L’adresse de l’émetteur - ‘headers : Les informations d’en-tête de votre email. $params : Tableau de paramètres dans lequel vous pouvez récupérer les informations que vous allez passer dans la fonction drupal_mail

function MyModule_mail($key, &$message, $params) {
  // note: l'utilisation d'une clé va nous permettre de distinguer plusieurs templates d'emails pouvant être envoyés par un même module.
  switch ($key) {
    case 'envoi_email':
      // note: Ici nous récupérons les informations passées dans le tableau $params
      $message['subject'] = $params['subject'];
      $message['body'] = $params['body'];
      break;
  }
}

La fonction drupal_mail() va nous permettre de définir un ou plusieurs templates d’emails dans lesquels nous allons pouvoir spécifier le contenu, le sujet et passer des paramètres pouvant être utilisés par la fonction hook_mail que nous venons de déclarer.

$module : Nom de votre module
$key : La clé qui va vous permettre d’identifier votre email
$to : L’adresse du destinataire
$language : La langue dans laquelle sera traduit votre email
$params : Le tableau optionnel de valeurs à passer à la fonction hook_mail
$from : L’adresse de l’émetteur
$send : Configure l’envoi immédiat ou non de l’email

Vous pouvez appeler cette fonction à la suite d’une action d’un utilisateur sur votre site ou encore lors de la soumission d’un formulaire.

$to = 'you@example.com';
$from = 'me@example.com';

$params = array(
  'body' => t("Vous venez de recevoir cet email depuis mon site drupal"),
  'subject' =>t("test d'envoi d'email"),
);

if (drupal_mail('MyModule', 'envoi_email', $to, language_default(), $params, $from, TRUE)) {
  drupal_set_message("Votre email à été envoyé à " . $valid_email);
}
else {
  drupal_set_message("Une erreur s'est produite lors de l'envoi de votre email");
}

Note : Si vous comptez envoyer des emails à des utilisateurs enregistrés sur votre site pensez à utiliser leurs paramètres, comme la langue d’affichage que vous pourrez trouver dans l’objet $user.

Credit photo : JulesAngel

Julien Dubreuil

Vous avez une idée, un projet web à réaliser ?

Ensemble, mettons en oeuvre sa réussite. Je vous accompagne dans vos projets, depuis l'élaboration du cahier des charges jusqu'à la mise en production. Pour plus d'information n'hésitez pas à me contacter.

Contactez-moi