Logo 6tech
Accueil du site > Tutoriaux > Mail HTML en image

Mail HTML en image

Il arrive parfois de vouloir envoyer un mail en HTML et d’y incorporer des images. Généralement, il suffit de placer l’adresse absolue de l’image dans le tag correspondant. Cependant, il peut être nécessaire de lier l’image dans le mail, pour par exemple pouvoir relire le mail hors connexion.

Les différentes composantes d’un mail

Dans un mail il y a 3 grosses parties :

  • Les entêtes qui indiquent ce que contient le mail, qui est le destinataire, qui est l’envoyeur, à qui faut il répondre, ….
  • Le corps du message ( qu’il soit en HTML ou en texte simple )
  • Les fichiers joins ( images, documents, …)

Ces trois parties sont séparées par un délimiteur qu’il convient de renseigner dans les entêtes du mail.

 Le délimiteur

Il convient d’utiliser une séquence difficile à retrouver dans le reste du mail ( de façon à ne pas confondre une occurence d’un texte avec le délimiteur ). On va le définir de la façon suivante et récupérer un délimiteur de 32 caractères.

<?php
    $delimiteur 
'--'.'---='.md5uniqidrand() ) );
?>

J’ai du coupé les 4 tirets du délimiteur pour contrer les raccourci typolographiques de spip :)

 Les entêtes

Les entêtes sont importantes, une erreur bien placée pourrait vous donner l’envie de vous arracher les cheveux pendant 2 semaines sans jamais trouver la source de l’erreur.

On va définir le type MIME du message, , le sous type ou la nature du contenu du mail ( présentement “« related »” [1] ), l’adresse à laquelle répondre et l’envoyeur. On définit également quel sera la séquence du délimiteur servant à départager les différentes informations du mail.

<?php
    $headers  
"MIME-Version: 1.0\r\n";
    
$headers .= "Content-Type: multipart/related; boundary=\"$delimiteur\"\r\n";
    
$headers .= "Reply-to: $from\r\n";
    
$headers .= "From: $from\r\n";
    
$headers .= "\r\n";
?>

( ceci est une liste non exhaustive d’entêtes )

 Référencer les images dans le mail

Afin d’insérer les images dans le mail, il convient d’assigner à chaque image une référence et indiquer dans le texte la référence. On appellera cette référence le « CID » [2].

On pars du principe que vous avez possédez déjà une liste des images de votre message HTML dans une variable nommée $imgListe( sinon il faudra trouver d’autre moyen comme preg_match_all, ou alors un listing de répertoire si jamais toutes les images de votre mail se retrouve « par chance » dans un même dossier. )

On va donc assigner à chaque image un identifiant nommé "image-*" où * sera remplacé par l’indice du tableau correspondant à cette image, et on remplacera l’occurence de cette image dans le contenu du mail ( symbolisé ici par $content ) par cet identifiant.

<?php
    
foreach($imgListe as $k => $v){
        
$content str_replace($v'cid:image'.$k$content);
        }
?>

Notes

[1] permet de spécifier que les différentes parties du message devrait être traitées comme un tout

[2] Content-ID

bas de page Contact - EIC 6tech  - SIRET : 479 088 270 00018 - Tel: 0870 406 988 - © 2008