【问题标题】:Whats the correct way to embed images PHPMailer with an HTML email?用 HTML 电子邮件嵌入图像 PHPMailer 的正确方法是什么?
【发布时间】:2012-12-25 10:09:08
【问题描述】:

我想用 PHPMAiler 发送时事通讯。时事通讯确实有效,但我想知道是否有更好的选择。

我所拥有的是。

  1. HTML 页面
  2. 图片

现在我的代码如下所示

$mail = new PHPMailer();

//Adding the body
$body = file_get_contents('template/index.htm');

$mail->Subject = "PHPMailer Test Subject via mail(), basic";

$mail->AltBody = "To view this message, please use an HTML compatible email viewer!";


$mail->SetFrom('xxxxxxx', 'xxxxxxxxxx');

$address = ".......@gmail.com";
$mail->AddAddress($address, "xxxxxxx");

$mail->AddEmbeddedImage("template/images/bullet_point.gif","1");
$mail->AddEmbeddedImage("template/images/template_1_01.gif","2");
$mail->AddEmbeddedImage("template/images/template_1_03.gif","3");


$mail->MsgHTML($body);

if(!$mail->Send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}

我使用 file_get_contents 来获取 html 页面,并使用 AddEmbeddedImage 来嵌入图像,现在有没有办法只将 HTML 页面传递给 PHPMailer 并且 PHP Mailer 会自动嵌入这些图像?

【问题讨论】:

  • 如果符合您的需要,您可以只从外部源加载图像。发送和接收的邮件会更小。
  • 这在我的情况下不起作用,因为图像可以在任何阶段移动

标签: php phpmailer


【解决方案1】:

我不认为你试图做的事情是可能的(自动添加所需的图像)使用 PHPMailer “从头开始”。

也许您可以解析 HTML 以获取它链接到的图像列表?至少有两种方法:

  • 使用 reexes ;如果您尝试从 HTML 中提取数据,通常不是最好的方法——而且您是 ^^
  • 另一种(可能)更好的方法是在从文件加载的 HTML 内容上使用DOMDocument::loadHTMLfile_get_contents 的输出),并使用DOMDocument 的方法(以及,为什么不呢,DOMXPath ?)

要获取图像,我想您的电子邮件中有<img> 标签,带有src 属性;目标是找到这些值;-)

获得图像路径列表后,您可以遍历它们,并在每个图像上调用 $mail->AddEmbeddedImage

我想这会很好(虽然没有尝试过,但我不明白为什么它不会)

附带说明,另一种方法是将图像在您的服务器上保留几天/几周/几个月,而不是将它们包含在邮件中;它会使邮件变小,这意味着:

  • 您这边花费的带宽更少(如果您发送大量邮件,这可能代表相当大的带宽)
  • 在每个客户方面花费的带宽更少 - 这对他们也很好 ^^
  • 在他们的硬盘上使用的空间更少;-)

为了确保图像不会在几周/月之前在服务器上被删除/替换,您可以为每个时事通讯创建一个新目录,其中包含它的图像 - 并且偶尔删除早于X 天的目录。

【讨论】:

    猜你喜欢
    • 2011-06-22
    • 2019-08-13
    • 2011-04-12
    • 2016-11-06
    • 2011-10-06
    • 2015-03-14
    • 2011-11-09
    • 2012-07-29
    相关资源
    最近更新 更多