2 votes

Problème avec l'e-mail HTML PHP comprenant de multiples images

Je suis en train d'écrire un petit plugin de messagerie en php pour les informations des utilisateurs et je veux intégrer plusieurs images en encodage base64, le problème est que seule la première image est intégrée. Toute solution ? Tous les chemins sont corrects, et le html est intégré avec succès. Si j'échange l'ordre des images intégrées dans le code, l'image affichée dans le Mail change également, donc les deux sont disponibles, mais elles ne sont pas affichées en même temps.

\n";
  $Header.= "X-mailer: PHP/" . phpversion(). "\n";  
  $Header.= "MIME-Version: 1.0\n";
  $Header.= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"; type=\"text/plain\"\n"; 

  $MailBody = "--".$mime_boundary."\n";
  $MailBody.= "Content-Type: Text/HTML; charset=iso-8859-1$EOL";  
  $MailBody.= "Content-Transfer-Encoding: quoted-printable\n\n";  
  $MailBody.= file_get_contents("../mail/mail.htm");
  $MailBody.= "\n\n";
  $MailBody.= "--".$mime_boundary."\n";  

  $MailBody= str_replace("images/logo.gif", "cid:$CID.$ImgName", $MailBody);
  $MailBody= str_replace("images/right2.jpg", "cid:$CID.$ImgNameRight", $MailBody);

  $fpr = fopen ($ImageLocationRight, "rb");
  $strr = fread ($fpr, filesize ($ImageLocationRight));
  $datar = chunk_split(base64_encode($strr));
  $content.= "Content-Type: image/jpg\n";
  $content.= "Content-ID: <$CID.$ImgNameRight>\n";
  $content.= "Content-Transfer-Encoding: base64\n";
  $content.= "Content-Disposition: inline; filename=\"$ImgNameRight\"\n\n";
  fclose($fpr);

  $content.= $datar."\n";

  $MailBody.= $content;
  $MailBody.= "--".$mime_boundary."--\n";

  $fp = fopen ($ImageLocation, "rb");
  $str = fread ($fp, filesize ($ImageLocation));
  $data = chunk_split(base64_encode($str));
  $content = "";
  $content.= "Content-Type: image/gif\n";
  $content.= "Content-ID: <$CID.$ImgName>\n";
  $content.= "Content-Transfer-Encoding: base64\n";
  $content.= "Content-Disposition: inline; filename=\"$ImgName\"\n\n";  
  fclose($fp);

  $content.= $data."\n";

  $MailBody.= $content;
  $MailBody.= "--".$mime_boundary."--\n";

  echo $MailBody;

  mail($MailTo, $MailToSubject, $MailBody, $Header);
?>

2voto

Ivan Mata Points 36

Si vous n'avez pas trouvé de solution à ce problème, j'ai rencontré un problème similaire et j'ai finalement compris ce qui en est la cause!

Juste après avoir attaché votre première image, supprimez simplement les tirets de clôture pour la limite MIME :

Au lieu d'avoir ce code :

$MailBody.= "--".$mime_boundary."--\n";

Essayez plutôt ceci :

$MailBody.= "--".$mime_boundary."\n";

Ceci concerne uniquement toutes les images avant la dernière, vous devez garder les tirets de clôture dans la toute dernière image.

0voto

Awais Qarni Points 4591

Salut, vous ne concatenez pas les images avec votre chaîne $MailBody. Votre code devrait être comme ceci

$MailBody .= str\_replace("images/logo.gif", "cid:$CID.$ImgName", $MailBody);
$MailBody .= str\_replace("images/right2.jpg", "cid:$CID.$ImgNameRight", $MailBody);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X