我知道如何将图像作为附件嵌入到电子邮件中,但这并不是我真正想做的。我想要做的是将图像嵌入到邮件中,并在电子邮件本身的正文中使用它。是否可以这样做或可能以某种方式引用附件以在消息中使用?
我应该担心这个吗?通过指向我网络上的图像的链接加载它们是否更有益?我在想这会减轻我的服务器的一些负载,因此不必在每封打开的电子邮件中直接从我的站点下载它,从而稍微减少带宽。
注意:我不是在寻找任何电子邮件框架或库等,只是为了完成这项任务的简单方法。
我知道如何将图像作为附件嵌入到电子邮件中,但这并不是我真正想做的。我想要做的是将图像嵌入到邮件中,并在电子邮件本身的正文中使用它。是否可以这样做或可能以某种方式引用附件以在消息中使用?
我应该担心这个吗?通过指向我网络上的图像的链接加载它们是否更有益?我在想这会减轻我的服务器的一些负载,因此不必在每封打开的电子邮件中直接从我的站点下载它,从而稍微减少带宽。
注意:我不是在寻找任何电子邮件框架或库等,只是为了完成这项任务的简单方法。
人们会插话告诉你使用 SwiftMailer 或其他一些库。但这并不难。这真的很挑剔,但并不难。下面是我使用的一个功能。我已经匿名了一点,希望没有破坏任何东西。在 html 消息(我从另一个函数中获得)中,以这种方式链接到您附加的图像:
$output .= '<p><img src="cid:' . $linkID . '" alt="graph" /></p>';
$linkID
下面的函数中使用的相同值在哪里。
public function sendEmail($emailAddress)
{
$random_hash = md5(date('r', time()));
$htmlString = $this->getHTML($random_hash);
$message = "--mixed-$random_hash\n";
$message .= 'Content-Type: multipart/alternative; boundary="alt-' . $random_hash . '"' . "\n\n";
$message .= 'MIME-Version: 1.0' . "\n";
$message .= '--alt-' . $random_hash . "\n";
$message .= 'Content-Type: text/plain; charset="iso-8859-1"' . "\n";
$message .= 'Content-Transfer-Encoding: 7bit' . "\n\n";
// text message
$message .= strip_tags($htmlString) . "\n\n";
$message .= '--alt-' . $random_hash . "\n";
$message .= 'Content-Type: text/html; charset="iso-8859-1"' . "\n";
// $message .= 'MIME-Version: 1.0' . "\n";
$message .= 'Content-Transfer-Encoding: 7bit' . "\n\n";
// html message
$message .= $htmlString . "\n\n";
$message .= '--alt-' . $random_hash . '--' . "\n";
// graph image
if($this->selectedGraph != 0)
{
$graphString = $this->getGraph();
$graphString = chunk_split(base64_encode($graphString));
$linkID = 'graph-' . $random_hash . '-image';
$message .= '--mixed-' . $random_hash . "\n";
$message .= 'MIME-Version: 1.0' . "\n";
$message .= 'Content-Transfer-Encoding: base64' . "\n";
$message .= 'Content-ID: ' . $linkID . "\n";
$message .= 'Content-Type: image/gif; name="graph.gif"' . "\n";
$message .= 'Content-Disposition: attachment' . "\n\n";
$message .= $graphString;
$message .= '--mixed-' . $random_hash . '--' . "\n";
}
else
{
$message .= '--mixed-' . $random_hash . '--' . "\n";
}
$headers = 'From: ' . $this->from. "\r\nReply-To: " . $this->replyto;
$headers .= "\r\nContent-Type: multipart/related; boundary=\"mixed-" . $random_hash . "\"\r\nMIME-Version: 1.0";
$flags = '-f ' . BOUNCED_EMAIL_ADDRESS;
return mail($emailAddress, $this->subject, $message, $headers, $flags);
}
是否值得去做是另一个问题。如果您附加图像,则您正在使用带宽将消息发送出去。也许一次使用所有带宽而不是分散带宽对您来说更好?也许不吧。
在我不得不向每个收件人发送不同的图像之前,我没有使用附加图像。我不打算在我们的服务器上存储和管理所有这些图像(并尝试唯一地命名它们)。
Content-Type: multipart/related;
type="text/html";
boundary="Boundary1"
--Boundary1
Content-Type: multipart/alternative;
boundary="Boundary2"
--Boundary2
Content-Type: text/html; charset = "utf-8"
Content-Transfer-Encoding: 8bit
<img src="cid:content_id_from_attachment">
--Boundary2--
--Boundary1
Content-Type: image/jpeg; name="somefilename.jpg"
Content-Transfer-Encoding: base64
Content-ID: <content_id_from_attachment>
Content-Disposition: inline; filename="somefilename.jpg"
//binary data
--Boundary1--
边界、字符集、内容传输编码当然都是可以选择的。PHPMailer 包可以自动为您执行此操作:http ://www.ustrem.org/en/article-send-mail-using-phpmailer-en/
另见包括图片: http: //mailformat.dan.info/body/html.html
我认为这样做的唯一方法是通过 url 引用图像,如下所示:
<img src="http://www.youwebsite.com/yourimage.jpg" alt="This is a description" />