我正在用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);
?>
答案 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);