6

有没有办法将图像附加到用 PHP 创建的 html 格式的电子邮件?

我们需要确保发送给在阅读电子邮件时可能无法访问互联网的客户的电子邮件中包含公司徽标(他们显然可以下载文件)。

4

6 回答 6

11

试试 PEAR Mail_Mime包,它可以为您嵌入图像

您需要使用addHTMLImage()方法并传递内容 id (cid),这是一个唯一的文本字符串,您还将在 img 的 src 属性中用作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);
于 2009-02-11T13:53:49.483 回答
2

使用一些可以处理电子邮件附件的库可能是最简单的。例如,PEAR 的Mail_Mime

于 2009-02-11T13:54:09.547 回答
1

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、雅虎和 hotmail 帐户上测试您的格式。

于 2009-02-11T14:02:42.740 回答
0

您是自己滚动还是使用预制类?我自己推荐 PHP Mailer[0],还有 PEAR::Mail_Mime[1] 等等,Google 很乐意帮你找到。多年来,我一直在使用 PHP Mailer 发送带有嵌入式图像[2] 的消息而没有遇到任何问题,但请记住,每个图像都会极大地增加电子邮件的带宽权重,因此通常不应将其用于任何批量处理。为了呼应比尔,也要 使用纯文本替代方案。

[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

于 2009-02-11T13:54:57.750 回答
0

这里有足够多的答案可以帮助解决您的特定问题,但我只是认为值得指出的是,您可能有一个更大的问题,您可能没有考虑过。

具体来说 - 编写通过 PHP 发送的电子邮件充满了潜在的陷阱,只有在您非常清楚可能出现的问题时才应该这样做。

如果您计划相当密集地发送电子邮件,我强烈建议您通过专用的电子邮件营销客户端或实施将为您发送电子邮件的众多电子邮件营销 API 之一。(mailchimp显然是一个不错的)。

于 2009-02-11T14:37:32.360 回答
0

在这里试用 swiftmailer 是一个很好的例子,如何使用嵌入图像http://swiftmailer.org/wikidocs/v3/embedding_images?s[]=embed

于 2010-05-03T21:36:24.213 回答