使用PHPMailer发送电子邮件-将图片嵌入正文

111

我正在尝试使用PHPMailer发送包含图片的HTML邮件。

邮件正文从一个包含所有信息的html文件中加载。

发送邮件时,即使我将图片作为附件一并发送,图片也不会出现在正文中。

HTML的<img>标签指向了同一个位置。

PHP代码:

$mail->AddAttachment('img/2u_cs_mini.jpg');

我该如何使HTML指向附件以便图片可以在正文中加载。

看了一下附带PHPMailer的例子,我没有注意到任何区别,在他们的例子中这张图片确实出现了。

2个回答

242

我找到了答案:

$mail->AddEmbeddedImage('img/2u_cs_mini.jpg', 'logo_2u');

<img> 标签上放置 src='cid:logo_2u'


3
非常有帮助!不过,我有点好奇,你是从哪里找到这个的?能否解释一下? - mtk
为什么在cid的末尾要加反斜杠? - Plummer
我做这件事情已经很久了,我不记得是否有任何原因。我认为没有。很可能只是一些垃圾。 - elvispt
8
我认为反斜杠是从先前转义引号的代码中错误地保留下来的,例如 echo "src=\"cid:logo_2u\"" ,我不认为反斜杠是必要的。 - Cruel
10
对于需要非专家解释的人:您需要告诉渲染引擎从何处获取图像以及使用什么协议(如果要使用附加的图像,则使用cid“协议,内容ID”)。 使用AddEmbeddedImage为附件赋予ID,以便您可以引用它(请注意,这可能是声音和其他类型的文件)。 - PhoneixS
我正在将PHPMailer从5.2更新到6.1,不幸的是,我的旧解决方案使用内联嵌入式图像<img src="data:image/png;base64...>不再起作用。您提供的解决方案意味着通过源添加图像,而不是通过HTML模板添加图像,这对我来说很难处理。有什么解释或解决方案,为什么内联数据:不再起作用? - Wolfgang Blessen

6
根据PHPMailer手册,完整答案如下:
$mail->AddEmbeddedImage(filename, cid, name);
//Example
$mail->AddEmbeddedImage('my-photo.jpg', 'my-photo', 'my-photo.jpg '); 

用例:
$mail->AddEmbeddedImage("rocks.png", "my-attach", "rocks.png");
$mail->Body = 'Embedded Image: <img alt="PHPMailer" src="cid:my-attach"> Here is an image!';

如果您想显示远程URL的图像:
$mail->addStringAttachment(file_get_contents("url"), "filename");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接