如何在 phpmailer 中嵌入图像 - 我做不到,为啥?

Posted

技术标签:

【中文标题】如何在 phpmailer 中嵌入图像 - 我做不到,为啥?【英文标题】:How to embed image in phpmailer - I can't do it, why?如何在 phpmailer 中嵌入图像 - 我做不到,为什么? 【发布时间】:2016-03-29 17:49:08 【问题描述】:

我正在尝试在 phpmailer 中将图像包含在我的消息中。以下是我的代码,正在发送邮件但没有嵌入图像,而是似乎附加到电子邮件中。 不知道我的代码有什么问题,请帮忙?

<!doctype html>
<html>
<head>
<meta charset="UTF-8">

<?php
    require_once('class.phpmailer.php');   
    require_once('class.smtp.php');    
    $mail = new PHPMailer();   
    $mail->CharSet = "UTF-8";
    $mail->From = "xxxxx";    
    $mail->FromName = "Jan Nowak";   
    $mail->AddReplyTo('xxxx'); 

    $mail->Host = "xxxxxx";  
    $mail->Mailer = "smtp";   
    $mail->SMTPAuth = true;    
    $mail->Username = "xxxxx";    
    $mail->Password = "xxxxxx";    
    $mail->Port = xxx;  usługi poczty
    $mail->Subject = "temat";    
    $mail->Body = 'treść maila';    

    $mail->IsHTML(true);
    $mail->AddEmbeddedImage('images/Kartka.png', 'Kartka');
    $mail->Body = "<h1>Test 1 of PHPMailer html</h1><p>This is a test</p>";
        "<p>This is a test picture: <img src=\"images/Kartka.png\" /></p>";


     //$mail->addAttachment ('images/Kartka.jpg'); 
    $mail->AddAddress ("xxxxx");    

     if($mail->Send())    
                              
        echo 'E-mail został wysłany'; 
                    
    else    
                   
        echo 'E-mail nie mógł zostać wysłany';    
        
  ?>  

</html>
</head>

【问题讨论】:

Send email with PHPMailer - embed image in body的可能重复 另外看看msgHTML()方法。 【参考方案1】:

&lt;img&gt; 标签上添加src='cid:Kartka'

$mail->AddEmbeddedImage('images/Kartka.png', 'Kartka');
$mail->Body = "<h1>Test 1 of PHPMailer html</h1><p>This is a test</p>";
"<p>This is a test picture: <img src=\"cid:Kartka\" /></p>";

你为什么用这么多\??你也可以这样做:

<img src="cid:Kartka"/>

【讨论】:

$mail->AddEmbeddedImage('images/Kartka.png', 'Kartka'); $mail->Body = "

PHPMailer html 测试 1

这是一个测试

"; "

这是一张测试图:

"; - 但它仍然不起作用....
所以现在我喜欢这个,因为如果我喜欢这个 - 它说 Parse error: syntax error, unexpected T_STRING in /home/ln168827/public_html/第 27 行的 phpmail/index.php - 我完全理解了您在 标记上添加 src='cid:Kartka' 的意思 不要使用斜线:/ - 我可以在聊天中进一步帮助您吗?【参考方案2】:

在您希望图像出现在正文中的位置添加此标记

$mail->Body = "... <img src='cid:logo.png> ..";

$mail->AddEmbeddedImage($_SERVER['DOCUMENT_ROOT']."[path_to_image] logo.png",'logo.png','logo.png');

适用于 Outlook 和所有其他电子邮件客户端软件

【讨论】:

【参考方案3】:

这不起作用的原因是您没有将包含图像 html 的字符串分配给电子邮件正文中使用的变量。问题在于第二行的分号以及第三行字符串中引用图像的方式。

$mail->AddEmbeddedImage('images/Kartka.png', 'Kartka');
$mail->Body = "<h1>Test 1 of PHPMailer html</h1><p>This is a test</p>";
    "<p>This is a test picture: <img src=\"images/Kartka.png\" /></p>";

应该是

$mail->AddEmbeddedImage('images/Kartka.png', 'Kartka');
$mail->Body = "<h1>Test 1 of PHPMailer html</h1><p>This is a test</p>".
    "<p>This is a test picture: <img src=\"cid:Kartka\" /></p>";

或者

$mail->AddEmbeddedImage('images/Kartka.png', 'Kartka');
$mail->Body = "<h1>Test 1 of PHPMailer html</h1><p>This is a test</p><p>This is a test picture: <img src=\"cid:Kartka\" /></p>";

【讨论】:

以上是关于如何在 phpmailer 中嵌入图像 - 我做不到,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

phpmailer 自动包含本地图片

如何在 PHPMailer 主题字段中插入图标​​或图像

在邮件中嵌入图像而无需物理图像文件

当我们使用 phpMailer 发送带有动态内容的邮件时,如何在电子邮件正文中显示多个内联图像

没有附件的正文上的phpMailer图像

Freemarker 在 ftl 上嵌入图像