9.2. 构造消息

这里有一个关于如可构造基本邮件消息和设置邮件接收者的示例。在这个示例中,我会用纯文本和html两种格式发送一个简单的备忘录给我的老友Life。

[Note]Note

注意,Solar_Mail_Message set*()系列方法是流畅的,所以在适当的时候你可以把他们串起来使用。(你可以在这里浏览Solar_Mail_Message的所有方法。)

<?php
$text = TEXT<<<
The quick brown fox jumps over the lazy dog.

Now is the time for all good men to come to the aid of their country.
TEXT;

$html = HTML<<<
<p>The quick brown fox jumps <em>over</em> the lazy dog.</p>

<p><strong>Now</strong> is the time for all good men
to come to the aid of their country.</p>
HTML;

$mail = Solar::factory('Solar_Mail_Message');

$mail->setCharset('utf-8')
     ->setFrom('pmjones@example.com', 'Paul M. Jones')
     ->addTo('boshag@example.com', 'Bolivar Shagnasty')
     ->addCc('nobody@example.net')
     ->setSubject('A Short Test Message')
     ->setText($text)
     ->setHtml($html);
?>

这很简单,不是吗?但是这种方法安全吗?

9.2.1. 邮件头和注入攻击

任何最终以头部发送的信息,包括收件人地址和邮件标题,都需要经过审查以防止邮件头注入攻击,我们通常是通过移除头部标签值中的新行来避免这种攻击的。我们假设你想添加自定义邮件头部:

<?php
$mail = Solar::factory('Solar_Mail_Message');
$mail->setHeader('X-Custom-Header', "Foo\r\n\r\nAn evil message");
?>

在一个较不安全的系统中,这将会发送下面的邮件头部:

X-Custom-Header: Foo

An evil message.

这是很不合谐的 -- 有人把恶意消息(可能是广告、病毒)注入到我们的邮件中来了。

使用Solar_Mail_Message,当发送邮件时,上面发出去的邮件头部如下:

X-Custom-Header: FooAn evil message

我们自动过滤了邮件头部标签值中的新行,所以使用Solar_Mail_Message是可以避免头部注入攻击的。(如果有其他途径进行头部注入攻击,欢迎和我交流。)