2009-07-21 81 views
1

我想用PHPMAiler发送简报。该通讯确实有效,但我想知道是否有更好的选择来做到这一点。用HTML电子邮件将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 = "[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会自动嵌入这些图像?

+0

您可以从外部来源加载图像,如果这符合您的需求。发送和接收的邮件会更小。 – usoban 2009-07-21 12:31:15

+0

这在我的情况下不起作用,因为图像可以在任何阶段移动 – Roland 2009-07-21 12:33:16

回答

1

我不认为你正在尝试做什么是可能的(自动添加所需图像)与PHPMailer“从头开始”。

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

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

工作来获取图像,我想你有你的电子邮件<img>标签,与src属性;目标是找到那些值;-)

一旦你有了图像路径列表,你可以迭代它们,并在它们每一个上调用$mail->AddEmbeddedImage

我想这将工作得很好(虽然没有尝试,但我不明白为什么它不会)。作为一个方面说明,另一种方法是将图像保存在服务器上几天/每周/月,而不是将它们包含在邮件中;它将使邮件较小,这意味着:

  • 较少的带宽就在你身边度过了(如果你正在发送大量的邮件,它可以代表带宽相当的大写金额)
  • 花在每个人少的带宽你的客户的一面 - 这是他们不错过^^
  • 自己的硬盘;-)

,并确保图像不会将被删除/替换之前在服务器上使用更少的空间几个星期/月,你可以为每个时事通讯创建一个新目录,包含它的图像 - 和偶尔会删除X以前的目录。

相关问题