web-dev-qa-db-fra.com

Comment envoyer un e-mail HTML

Je crée un module simple qui enverra des e-mails HTML aux utilisateurs pour des offres sur notre site Web.

J'ai beaucoup cherché, mais je ne trouve pas de solution appropriée pour Drupal. Maintenant, je peux envoyer des mails mais en texte brut.

Qu'est-ce qu'une procédure étape par étape pour envoyer des e-mails HTML dans Drupal 7?

function example_form_submit( $form,&$form_state) {
    $friend_email=$form_state['values']['friend_email'];
    $mailto =$friend_email;  //gift to a friend
    $mailfrom ='[email protected]';
    $subject = "another message for  HTML email from example.com";
    $body="<h2 style='font-size:28px;color:red;'>Hello EMAIL, i here i want to be <b>bolded</b></h2>";
    if (drupal_mail('example', 'send_gift', $mailto, language_default(),$params,$mailfrom,TRUE)) {
        drupal_set_message(t('Your gift was sent successfully!!!'));
    }
    else {
        drupal_set_message(t('<font color="red">Error occured while sending your mail!!!</font>'));
    }


/****hook_mail*/
function example_mail($key,&$message,$params) {
    $language = $message['language'];
    switch ($key) {
        case 'send_gift':
            $message['subject']=t($params['subject'], $var, $language->language);
            $message['body'][]=$params['body'];
            $message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed';
        break;
    }
}
25
mrcniceguy

Comme Geoff l'a mentionné, une option serait d'utiliser le module Mime Mail, mais vous pouvez également activer votre module personnalisé pour envoyer des e-mails HTML avec du code supplémentaire. En bref, vous devez modifier le mail_system variable et écrivez votre propre implémentation de MailSystemInterface. Un exemple de cela est le code suivant.

Dans 'mymodule.install':

function mymodule_enable() {
  $current = variable_get('mail_system', array('default-system' => 'DefaultMailSystem'));
  $addition = array('mymodule' => 'MymoduleMailSystem');
  variable_set('mail_system', array_merge($current, $addition));
}

function mymodule_disable() {
  $mail_system = variable_get('mail_system', array('default-system' => 'DefaultMailSystem'));
  unset($mail_system['mymodule']);
  variable_set('mail_system', $mail_system);
}

À l'intérieur de 'mymodule.module':

class MymoduleMailSystem extends DefaultMailSystem {
  public function format(array $message) {
    $message['body'] = implode("\n\n", $message['body']);
    $message['body'] = drupal_wrap_mail($message['body']);
    return $message;
  }
}

Vous devez remplacer les instances de mymodule par le nom de votre module, puis désactiver et réactiver votre module pour que la variable soit modifiée, après quoi les choses devraient fonctionner. Pour un exemple complet, vous pouvez consulter ma réponse ici . De plus, la page this sur drupal.org est à l'origine d'où j'ai obtenu toutes les informations.

22
Madis

Mime Mail le module est presque certainement ce que vous recherchez.

Il s'agit d'un module composant Mime Mail (pour une utilisation par d'autres modules).

  • Il permet aux utilisateurs de recevoir des e-mails HTML et peut être utilisé par d'autres modules. La fonctionnalité de messagerie accepte un corps de message HTML, le mime-endcode et l'envoie.
  • Si le HTML contient des graphiques intégrés, ces graphiques sont codés MIME et inclus en tant que pièce jointe de message.
  • Adopte le style de votre site en incluant automatiquement les fichiers de feuilles de style de votre thème dans un format de message HTML à thème
  • Si la préférence du destinataire est disponible et qu'il préfère le texte en clair, le code HTML sera converti en texte brut et envoyé tel quel. Sinon, l'e-mail sera envoyé en HTML thématique avec une alternative en texte brut.
  • Vous permet de thématiser les messages avec une clé de messagerie spécifique.
  • Convertit les styles CSS en attributs de style en ligne.
  • Fournit des actions système simples et des actions de règles pour envoyer des e-mails HTML avec des images et des pièces jointes intégrées.
7
geoff

Aucune des réponses ci-dessus n'a fonctionné pour moi, voici donc mon point de vue sur la question d'origine.

Tout d'abord, installez et activez le module Mime Mail . Vous pouvez lire le README.txt pour des instructions complètes sur la façon de l'utiliser. Je vais vous donner la version courte.

Vous devez activer Mime Mail pour votre module. Vous pouvez le faire en utilisant hook_enable ou hook_update_N dans example.install:

function example_enable() {
  mailsystem_set(array(
    'example_send_gift' => 'MimeMailSystem',
  ));
}

Lorsque vous allez à admin/config/system/mailsystem vous verrez qu'une nouvelle entrée a été ajoutée pour votre module:

Exemple de classe de module (clé send_gift)

MimeMailSystem

Maintenant, vous n'avez plus besoin de préciser text/html en-têtes, Mime Mail s'en charge. Vous n'avez donc pas besoin de cela:

$message['headers']['Content-Type'] = ...

Si vous le souhaitez, vous pouvez ajouter $message['plaintext'] à votre messagerie pour une alternative non HTML, mais ce n'est pas obligatoire.

C'est ça!

3
Wim Mostrey

Vous pouvez également consulter le module Swift Mailer. Il vous permet d'envoyer des e-mails HTML avec des pièces jointes en ligne et régulières (telles que des images ou des fichiers). En outre, il est également capable de générer automatiquement des versions en texte brut basées sur l'e-mail HTML.

Vous pouvez y jeter un œil http://www.drupal.org/project/swiftmailer

Pour mémoire: je suis l'auteur et le mainteneur du module.

3
sbrattla

Vous n'envoyez pas de code HTML approprié, vous incluez uniquement les balises H1 et B, vous devez probablement également inclure des balises HTML complètes à partir de
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

2
GoodSp33d