【问题标题】:PHP PHPMailer msgHTML <img href absolute PathPHP PHPMailer msgHTML <img href 绝对路径
【发布时间】:2021-11-23 14:32:43
【问题描述】:

我无法找到原始的 PHPMailer 文档,因此我尝试了这种方式。 我的理解是,如果我使用 msgHTML,PHPMailer 会自动将图像转换为邮件中的嵌入图像。 但我不知道如何将图像作为完整地址包含在内,例如:C:\\Temp\\Test.jpg!

&lt;img src"C:\\Temp\\Test.jpg&gt; 不起作用!

如何指定$mail-&gt;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

标签: php phpmailer


【解决方案1】:

你可以尝试将图片转成base64,然后放入src。

<p>From wikipedia</p>
  <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4
    //8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
</div>

看到这个:https://www.w3docs.com/snippets/html/how-to-display-base64-images-in-html.html

【讨论】:

  • 谢尔盖,谢谢,但我尝试让 PHPMailer 运行 msgHTML。
猜你喜欢
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 2020-08-17
  • 2023-03-03
相关资源
最近更新 更多