PHP HTML邮件问题,包括多个图像

时间:2011-04-01 08:18:31

标签: php email

我正在用PHP编写一个小邮件插件来获取用户信息,我想在base64编码中集成多个图像,问题是,只集成了第一个图像。有解决方案吗所有路径都是正确的,并且html已成功集成。如果我交换代码中集成的图像的顺序,Mail中显示的图像也会发生变化,因此它们都可用,但它们不会同时显示。

<?php

  $ImageLocation ="images/logo.gif";
  $ImageLocationRight ="images/right2.jpg";
  $ImgName = "logo.gif";
  $ImgNameRight = "right2.jpg";
  $MailFrom="Tool";
  $MailFromAdr="no_reply@xyz.com";
  $MailTo ="xyzr@xyz.com";
  $MailToSubject = "$subject";

  $CID = md5(uniqid (rand(), 1));

  $mime_boundary = "" . md5(uniqid(mt_rand(), 1));  


  $Header= "From:$MailFrom<$MailFromAdr>\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);
 ?>

2 个答案:

答案 0 :(得分:2)

如果您还没有找到解决方案,我遇到了类似的问题,最终得到了导致此问题的原因!

在您附加第一张图片之后,只需消除MIME边界的结束破折号:

而不是拥有此代码:

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

请改为尝试:

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

这仅适用于最后一张图像之前的所有图像,您必须在最后一张图像中保留关闭的破折号。

答案 1 :(得分:0)

嗨,你没有与你联系$ email body string。你的代码应该是这样的

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