使用HTML电子邮件嵌入图像phpmailer的正确方法是什么?
题
我想与phpmailer一起发送新闻通讯。新闻通讯确实有效,但我想知道是否有更好的选择。
我所拥有的。
- HTML页面
- 图片
现在我的代码如下
$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
天。
不隶属于 StackOverflow