Image sur les webmails

Par Jeremie Dupas, il y a 8 ans


Bonjour,

J'ai suivi le jolie tutoriel de Grafikart sur l'edition de mail en html. Cependant je souhaiterai ajouter des images en base64 dans ce mail.
J'ai vu sur internet la solution suivante: "cid". On mets en piece jointe l'image en base64 dans le mail pour ensuite le lier a notre contenu html.
problème ? C'est que Gmail me supprime carrément l'attribut src de mon image. Comment faire ? Manque-t-il quelque chose ?

Class de l'envoie de mail.

<?php class MAIL{ private static $base64_image = []; public static function img($name,$base64){ $id = md5(uniqid(rand())).$_SERVER['SERVER_NAME']; MAIL::$base64_image[] = [ 'id' => $id, 'base64' => $base64, 'name' => $name ]; return $id; } public static function compteConfirmation($id_compte = null,$id_mail = null,$mail = null,$first = false){ ob_start(); include DIR::parent().'includes/mails/header.php'; $html = ob_get_contents(); ob_end_clean(); return MAIL::send($mail,$html,$object); } public static function send($mail,$html,$subject){ if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)){ $passage_ligne = "\r\n"; }else{ $passage_ligne = "\n"; } if ($_SERVER['HTTP_HOST'] != 'localhost'){ $boundary = "-----=".md5(rand()); $header = "From: \"LiketoShare\"<admin@liketoshare.fr>".$passage_ligne; $header.= "Reply-to: \"LiketoShare\" <admin@liketoshare.fr>".$passage_ligne; $header.= "MIME-Version: 1.0".$passage_ligne; $header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne; $message = $passage_ligne."--".$boundary.$passage_ligne; $message.= $passage_ligne."--".$boundary.$passage_ligne; $message.= "Content-Type: text/html; charset=\"utf8\"".$passage_ligne; $message.= "Content-Transfer-Encoding: 8bit".$passage_ligne; $message.= $passage_ligne.$html.$passage_ligne; $message.= $passage_ligne."--".$boundary."--".$passage_ligne; $message.= $passage_ligne."--".$boundary."--".$passage_ligne; foreach(MAIL::$base64_image as $image){ $message .= $passage_ligne; $message.= $passage_ligne."--".$boundary.$passage_ligne; $message .= 'Content-Type: image/png; name="'.$image['name'].'"'.$passage_ligne; $message .= 'Content-Transfer-Encoding: base64'.$passage_ligne; $message .= 'Content-ID: <'.$image['id'].'>'.$passage_ligne.$passage_ligne; $message .= $image['base64'].$passage_ligne; $message .= $passage_ligne; } return mail($mail,$subject,$message,$header); }else{ return false; } } } ?>

Contenu du header.php que j'inclue (contenu du webmail).

<?php $logo = 'cid:'.MAIL::img('logo.png',base64_encode(file_get_contents(DIR::parent().'images/mails/logo.png'))); ?> [...] <td height="80" style="line-height:80px;" align="center"> <a href="<?php echo DIR::http(); ?>"> <img height="80" alt="Logo" src="<?php echo $logo; ?>"> </a> [...]

1 réponse