Il n'est pas rare que nous utilisions le service d'email de MailChimp couplé avec Mandrill dans nos projets. L'intégration avec Drupal 7 se fait assez facilement avec le module, en revanche l'utilisation des templates est moins évidente et c'est ce que je propose de présenter dans cet article.

Mailchimp

Création d'un template

Dans un premier temps, il faut créer un template Mailchimp. Dans l'onglet template, cliquez sur "Create template", et ensuite dans le sous-onglet "Code Your Own" choisissez "Paste in code". Il est possible de créer un template avec l'interface graphique et ensuite d'en exporter le code HTML.

Mise en place des régions

Cette partie est importante, en effet elle va permettre de préparer des "régions" pour y injecter des variables par la suite, comme par exemple le nom ou prénom de la personne qui va recevoir l'email.

Sans aucune région définie, il sera impossible d'utiliser le template avec le module Drupal.

Pour définir une région dans le template, il suffit de rajouter l'attribut mc:edit="region_name" dans une balise HTML.

<div mc:edit="body_message"></div>

Il est possible de définir plusieurs régions, une pour chaque variable à injecter.

Mandrill

Récupération du template

Pour utiliser le template fait avec MailChimp dans Mandrill, il faut passer par l'interface de MailChimp. En effet, si les deux comptes sont associés, il suffit de faire "Send To Mandrill" une fois que le template est crée.

SendTo

L'intégration Drupal 7

Il faut tout d'abord télécharger et activer le module Mandrill de Drupal. Attention, il est important de bien lire les instructions pour installer ce module. Pour avoir accès au template, il faut aussi activer le module mandrill_template. Pas besoin de le télécharger, il est inclus dans le module Mandrill.

Pré-requis

Une fois la clé API pour Mandrill renseignée, et le système d'email changé pour MandrillMailSystem, il faut ajouter une nouvelle configuration. Dans la partie New Setting de la configuration /admin/config/system/mailsystem, il faut sélectionner le module qui va envoyer l'email ainsi que sa clef.

/**
 * Implements hook_mail().
 */
function mymodule_contact_mail($key, &$message, $params) {
  switch ($key) {
    case 'email_key': // <= La clé à utiliser pour la configuration.
      $message['body'][] = "Mon message ici.";
      break;
  }
}

NewSetting

Une fois rajouté, il faut choisir MandrillMailSystem pour cette nouvelle entrée.

Utilisation d'un template

De retour dans la configuration de Mandrill, l'onglet Mandrill Template Maps est disponible, dans lequel il est possible d'ajouter un template Mandrill. Si la connexion avec Mandrill fonctionne, dans le sélecteur Email Template les différents templates de Mandrill vont apparaitre. A la sélection d'un template, le sélecteur des régions va se mettre à jour, et il est possible de choisir une région.

MandrillTemplate

C'est ici que la documentation devient rare. La région sélectionnée précédemment correspond à la région où sera injecté $message['body']. Pour remplir les autres régions du template, il faut rajouter un index mandrill_template_content à la variable $message. Voici un exemple.

$message['mandrill_template_content'][] = array(
    'name' => 'name_region', // le nom de la région.
    'content' => 'John Doe', // le contenu a injecté dans cette région.
);
$message['mandrill_template_content'][] = array(
    'name' => 'other_region',
    'content' => 'My content for this region',
);

Tout est configuré pour que l'email en question soit bien envoyé avec le template choisi.

Et pour Drupal 6?

Le module est aussi disponible pour Drupal 6, mais il n'est plus mis à jour depuis Décembre 2011. Il n'y a pas d'interface pour utiliser les templates. mais il existe une méthode dans la classe Mandrill : messages_send_template qui permet d'envoyer un email avec un template défini. Il est facile d'imaginer un hack pour prendre en compte les templates. Dans le fichier mandrill.mail.inc, les lignes suivantes peuvent être ajoutées.

if (isset($mandrill_message['template']) && !empty($mandrill_message['template'])) {
    $result = $mailer->messages_send_template(
        $mandrill_message['template'], // Le nom du template.
        $mandrill_message['global_merge_vars'], // Les variables à injecter.
        $mandrill_message
    );
} else {
    $result = $mailer->messages_send($mandrill_message);
}