WordPress: HTML Email, custom template et SMTP

On installe souvent des pulgins pour des choses simples à réaliser; et c’est dommage. Modifier les emails de WordPress n’est pas si compliqué quand on s’y penche un peu. Il faut savoir où regarder. Voici un petit pense-bête qui, j’espère, vous sera utile.

Custom template

Pour personnaliser les templates d’emails de WordPress il faut commencer par activer le support HTML. WordPress utilise PHPMailer. Nous allons donc modifier son initialisation. Rien de bien méchant:

add_filter( 'phpmailer_init', 'on_phpmailer_init' );
function on_phpmailer_init($phpmailer) {
	$phpmailer->IsHTML( true );
}

Maintenant nous allons utiliser le hook wp_mail pour y injecter notre template. Il faut modifier le ‘message’.
J’ai découpé le code du mail en trois parties: header, content et footer; pour y mettre les variables de notre message. Ici j’utilise une petite fonction load_tpl pour faire cela.
Si vous n’avez pas de template d’email sous la main, vous pouvez utiliser celui proposé par leemunroe qui est une bonne base.

add_filter('wp_mail', 'on_wp_mail' );
function on_wp_mail($args) {
    $header = load_tpl('header',array('sujet' => $args['subject']));
    $content = load_tpl('content',array('message' => $args['message']));
    $footer = load_tpl('footer');
    $args['message'] = $header.$content.$footer;
    return $args;
}

Maintenant vous pouvez faire un test:

$msg = '
<p>Hello World,</p>
<p>Curabitur aliquet quam id dui posuere blandit. Nulla porttitor accumsan tincidunt.</p>
<p>Cordielement!</p>';
wp_mail('mon@email.lol','Mon Test template emails', $msg);

Voilà, vous devrez à présent recevoir vos emails avec une petite mise en page un peu plus sympa que la version brute de base…

SMTP

Pour activer l’utilisation du protocole SMTP, il faut à nouveau se greffer sur le hook ‘phpmailer_init’. Nous allons pouvoir y renseigner les paramètres.

add_filter( 'phpmailer_init', 'on_phpmailer_init' );
function on_phpmailer_init($phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host = 'host_smtp';
    $phpmailer->SMTPAuth = true; // ou false; Force l'utilisation du nom d'utilisateur du mot de passe pour s'authentifier
    $phpmailer->SMTPSecure = 'ssl'; // ou tls 
    $phpmailer->Port = 465; //ssl port = 465 OR tls port = 587
    $phpmailer->Username = 'username';
    $phpmailer->Password = 'mon mot de passe';
    $phpmailer->From = 'mon@email.com';
    $phpmailer->FromName = 'Nom Prénom';
}

Voilà, si votre configuration est bonne, les emails devraient partir sans aucun soucis. Concernant le mot de passe, il peut être gênant de le conserver en dur dans le code. Vous pouvez le stoker en base de donnée avec un petit Encodage & Décodage maison.

Ajouter une version text/plain

mail-tester.com est un bon outil pour améliorer la dérivabilité des emails. Il recommande d’ajouter une version plain/text dans les emails HTML.
Vous pouvez le faire en utilisant encore une fois le hook ‘phpmailer_init’.
Mais attention, nous avons modifier le Body de notre email en y injectant le code HTML de notre template. Notre message n’est donc plus en text/plain.
Il existe plusieurs solutions mais pour ma part, j’utilise la librairie Soundasleep\Html2Text. Libre à vous de voir si cela vous convient ou de faire autrement.

add_filter( 'phpmailer_init', 'on_phpmailer_init' );
// on defini que les emails soient en HTML
function on_phpmailer_init($phpmailer) {
  // On ajoute une version text/plain dans le mail
  if( $phpmailer->ContentType == 'text/html' ) {
    require_once(get_template_directory().'/php/vendor/autoload.php');
    $ClearText = \Soundasleep\Html2Text::convert($phpmailer->Body);
    $phpmailer->AltBody = $ClearText;
  }
}

Et voilà! C’est fini !

il ne vous reste plus qu’a imaginer une petite page options dans le backoffice de WordPress pour y stocker les informations et vous pouvez vous passer d’un ou deux plugins. Libre à vous de pousser l’idée plus loin.

Articles similaires

Commencez à saisir votre recherche ci-dessus et pressez Entrée pour rechercher. ESC pour annuler.

Retour en haut