用HTML电子邮件将PHPMailer嵌入图像的正确方法是什么?
问题描述:
我想用PHPMAiler发送简报。该通讯确实有效,但我想知道是否有更好的选择来做到这一点。用HTML电子邮件将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 = "[email protected]";
$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
。
我想这将工作得很好(虽然没有尝试,但我不明白为什么它不会)。作为一个方面说明,另一种方法是将图像保存在服务器上几天/每周/月,而不是将它们包含在邮件中;它将使邮件较小,这意味着:
- 较少的带宽就在你身边度过了(如果你正在发送大量的邮件,它可以代表带宽相当的大写金额)
- 花在每个人少的带宽你的客户的一面 - 这是他们不错过^^
- 自己的硬盘;-)
,并确保图像不会将被删除/替换之前在服务器上使用更少的空间几个星期/月,你可以为每个时事通讯创建一个新目录,包含它的图像 - 和偶尔会删除X
以前的目录。
您可以从外部来源加载图像,如果这符合您的需求。发送和接收的邮件会更小。 – usoban 2009-07-21 12:31:15
这在我的情况下不起作用,因为图像可以在任何阶段移动 – Roland 2009-07-21 12:33:16