什么是使用HTML电子邮件嵌入PHPMailer图像的正确方法?

时间:2009-07-21 12:28:53

标签: php phpmailer

我想通过PHPMAiler发送简报。新闻通讯确实有效,但我想知道是否有更好的选择。

我拥有的是什么。

  1. HTML页面
  2. 图片
  3. 现在我的代码如下所示

    $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会自动嵌入这些图像?

1 个答案:

答案 0 :(得分:1)

我不认为你想要做的是(自动添加所需图像)与PHPMailer“从头开始”。

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

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

要获取图片,我认为您的电子邮件中包含<img>个标记,其中包含src个属性;目标是找到那些值; - )

获得图像列表路径后,迭代它们,并在每个图像路径上调用$mail->AddEmbeddedImage

我想这样可以正常工作(虽然没试过,但我不明白为什么不会这样做)

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

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

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