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>
[...]