有没有办法在PHP创建的HTML格式电子邮件消息中附加图像?
我们需要确保公司徽标出现在发送给客户的电子邮件上,这些客户可能在阅读电子邮件时没有互联网访问(他们显然可以下载文件)。
有没有办法在PHP创建的HTML格式电子邮件消息中附加图像?
我们需要确保公司徽标出现在发送给客户的电子邮件上,这些客户可能在阅读电子邮件时没有互联网访问(他们显然可以下载文件)。
cid:
URL。例如:include('Mail.php');
include "Mail/mime.php";
$crlf = "\r\n";
$hdrs = array(
'From' => 'foo@bar.org',
'Subject' => 'Mail_mime test message'
);
$mime = new Mail_mime($crlf);
//attach our image with a unique content id
$cid="mycidstring";
$mime->addHTMLImage("/path/to/myimage.gif", "image/gif", "", true, $cid);
//now we can use the content id in our message
$html = '<html><body><img src="cid:'.$cid.'"></body></html>';
$text = 'Plain text version of email';
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$body = $mime->get();
$hdrs = $mime->headers($hdrs);
$mail =& Mail::factory('mail');
$mail->send('person@somewhere.org', $hdrs, $body);
PEAR的Mail_Mime包是您在这里需要的。
一旦设置好您的消息,添加附件就像这样简单:
$mime = new Mail_mime("\n");
$mime->setTXTBody($msg_text);
$mime->setHTMLbody($msg_html);
// Add gif as attachment to mail
$mime->addAttachment("/path/to/image/smile.gif", "image/gif");
$body = $mime->get();
$headers = $mime->headers($headers);
$mail->send("joe@bloggs.com", $headers, $body);
如果您想让您的徽标在电子邮件中显示在特定的位置,而不仅仅作为附件,您可以执行以下操作:
// In your message html:
<img src='logo.gif' alt='Our logo' />
// PHP:
$mime->addHTMLImage('/path/to/image/logo.gif');
这种方法的效果可能因用户的邮件客户端而异,因此在发送之前,请尝试在虚拟的 Gmail、Yahoo 和 Hotmail 帐户上测试您的格式。
尝试使用SwiftMailer,这里有一个很好的例子,展示如何使用嵌入式图片 http://swiftmailer.org/wikidocs/v3/embedding_images?s[]=embed
[0] http://phpmailer.sourceforge.net/
[1] http://pear.php.net/manual/en/package.mail.mail-mime.php
[2] http://phpmailer.sourceforge.net/docs/PHPMailer/PHPMailer.html#AddEmbeddedImage
摘自http://lists.evolt.org/archive/Week-of-Mon-20060612/183029.html
这里有足够多的答案可以帮助解决您特定的问题,但我认为值得指出的是,您可能有一个更大的问题没有考虑到。
具体来说,通过PHP编写邮件发送程序充满了潜在的陷阱,只有当您非常清楚可能出现的问题时才应该这样做。
如果您计划频繁发送电子邮件,我强烈建议您通过专用的电子邮件营销客户端或实施其中许多电子邮件营销API之一来发送它们。(mailchimp 显然是一个不错的选择)。
$_html_images
成员被重命名为$html_images
并且是受保护的。https://github.com/pear/Mail_Mime/blob/1.10.0/Mail/mime.php#L111不过从Mail_mime派生一个新类并添加一个方法来获取cid
值也不难。 - Paul Dixon