【发布时间】:2021-11-23 14:32:43
【问题描述】:
我无法找到原始的 PHPMailer 文档,因此我尝试了这种方式。
我的理解是,如果我使用 msgHTML,PHPMailer 会自动将图像转换为邮件中的嵌入图像。
但我不知道如何将图像作为完整地址包含在内,例如:C:\\Temp\\Test.jpg!
<img src"C:\\Temp\\Test.jpg> 不起作用!
如何指定$mail->msgHTML($body, ?????, ????)
因为我不想在wwwroot 中盗用我的图片。
更新
由于某些愚蠢的原因,PPHMailer 不允许空的basedir。看了源码,终于明白了:
if (
//Only process relative URLs if a basedir is provided (i.e. no absolute local paths)
!empty($basedir)
解决方案:
所以这个问题的解决方案是,把所有的图片放到同一个文件夹,修改源代码或者写自己的解决方案AddEmbeddedImage。我做了什么:
preg_match_all('~<img.*?src=.([\/.a-z0-9:_-]+).*?>~si',$html,$matches);
$paths = array();
foreach ($matches[1] as $img) {
$img_old = $img;
if(strpos($img, "https://") == false) {
$content_id = md5($img);
$html = str_replace($img_old,'cid:'.$content_id,$html);
$pos = strrpos($img, '/');
$name = substr($img, $pos+1);
$mail->AddEmbeddedImage($img, $content_id, $name);
}
}
$mail->msgHTML($html);
$mail->send();
【问题讨论】:
-
查看官方网站的Documentation section,它将引导您访问Wiki和其他东西。
-
msgHTML是一种方便的函数,适用于非常常见的一组特定情况。如果不符合您的要求,您可以使用addAttachment等方法自行控制,并自行设置Body。