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