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>
[...]
Je serai toi je stockerai les images en base64 sur mon serveur... De plus cette méthode te permettrait de gagner du temps l'or de l'envoi du mail au client.
Mais is tu persistes il y a ça: https://www.campaignmonitor.com/blog/email-marketing/2013/02/embedded-images-in-html-email/