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

3 Responses to Envoyer des emails depuis un module

Avatar

Christophe

septembre 16th, 2011 at 9 h 50 min

Bonjour,
Comment faire pour attacher un contenu pdf par exemple?
Merci pour ces astuces!

Avatar

Julien

mars 6th, 2012 at 22 h 51 min

Après une recherche sur google il existe Apparemment il y a un solution avec le module mine_mail. Voici un article qui explique comment faire : How to Send Email with an Attachment from Drupal

Avatar

abder

avril 9th, 2012 at 0 h 44 min

merci pour cet article fort util.

Comment Form



About me

about me

Bienvenue sur mon blog. Sur cet espace j’essaie de partager au mieux ma passion pour le web et actuellement mon engouement pour Drupal. Vous trouverez ici mes découvertes, mes problématiques et les solutions rencontrées.

I am going to DrupalCon London!

Commentaires

  • zanane: Merci Julien ! Bravo pour ton site et ton esprit de partage [...]
  • vikin: Bonjour Julien. Cela fait quelques temps que je souhaite créer un blog en utilisant Drupal. Cer [...]
  • Julien Desrosiers: Bonne idée! Ça me fait penser à The Daily WordPress Reference, qui est un peu comme ça mais q [...]
  • fofiedelly: merci pour les astuces!! en passant ton blog tombe à l'heure meme où je me met sous drupal et il e [...]
  • Julien: Bonjour Non il n'y aura pas de version Française de [...]