1

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

我有的是。

  1. 网页
  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 会自动嵌入这些图像?

4

1 回答 1

1

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

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

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

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

一旦你有了图像路径列表,你就可以遍历它们,并调用它们$mail->AddEmbeddedImage中的每一个。

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

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

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

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

于 2009-07-21T17:47:21.957 回答