我想与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将自动嵌入这些图像?

有帮助吗?

解决方案

我不认为你要做什么是可能的 (自动添加所需图像) 带有phpmailer“从头开始”。

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

  • 使用rexexes;通常,如果您想从HTML提取数据,那么做事的最佳方法 - 您是^^
  • 另一个更好的方法是使用 DOMDocument::loadHTML 在您的文件中加载的HTML内容(输出 file_get_contents),并处理 DOMDocument (那么为何不, DOMXPath ?)

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

一旦有图像路径列表,您就会迭代它们,并致电 $mail->AddEmbeddedImage 在他们每个人上。

我想那会很好 (但是还没有尝试过,但是我不明白为什么不尝试).

附带说明,另一种方法是将图像保留几天/几周/几个月,而不包含它们。它将使邮件较小,这意味着:

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

为了确保在几周 /月之前不会在服务器上删除 /替换图像,您可以为每个新闻通讯创建一个新目录,包含其图像 - 并不时地删除比目录更古老的目录 X 天。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top