使用 PHP 发送漂亮的 HTML 邮件

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 提供适用于您旅程各个阶段的云产品。立即开始使用 $200 免费信用额度!

这将是对我们一直在这里使用的网站更改请求表单演示的延续。如果您需要赶上进度,首先我 谈论了它,然后我 构建了它,然后我 录制了它,然后我 保护了它。在所有这些过程中,最终结果一直是一封无聊的纯文本电子邮件,发送到单个电子邮件地址。

我们将改进该输出,并将电子邮件变成外观更漂亮的 HTML 格式电子邮件。

它与文本电子邮件没什么不同

通过 PHP 发送 HTML 电子邮件使用完全相同的mail函数作为文本电子邮件

mail($to, $subject, $message, $headers);

最后一个参数,标题,对于该函数是可选的,但对于发送 HTML 电子邮件是必需的,因为这是我们能够传递 Content-Type 声明以告知电子邮件客户端将电子邮件解析为 HTML 的地方。

实际上,标题区域使我们有机会执行许多重要的电子邮件功能。如果需要,我们可以在此处设置 From: 和 Reply To: 设置,以及 CC 和 BCC 其他收件人(嘿,为自己添加一个 CC 复选框将是一个很酷的功能!)。以下是用于新的改进的 HTML-Sendin' 网站更改请求表单的代码

$to = '[email protected]';

$subject = 'Website Change Request';

$headers = "From: " . strip_tags($_POST['req-email']) . "\r\n";
$headers .= "Reply-To: ". strip_tags($_POST['req-email']) . "\r\n";
$headers .= "CC: [email protected]\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

现在我们可以使用 HTML 标签

message 参数(我们传递给的包含我们电子邮件正文的大字符串mail函数),现在可以在其中包含 HTML 标签。例如

$message = '<html><body>';
$message .= '<h1>Hello, World!</h1>';
$message .= '</body></html>';

以下是一整套代码,用于创建如上所示的数据表

$message = '<html><body>';
$message .= '<img src="//css-tricks.org.cn/examples/WebsiteChangeRequestForm/images/wcrf-header.png" alt="Website Change Request" />';
$message .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
$message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>" . strip_tags($_POST['req-name']) . "</td></tr>";
$message .= "<tr><td><strong>Email:</strong> </td><td>" . strip_tags($_POST['req-email']) . "</td></tr>";
$message .= "<tr><td><strong>Type of Change:</strong> </td><td>" . strip_tags($_POST['typeOfChange']) . "</td></tr>";
$message .= "<tr><td><strong>Urgency:</strong> </td><td>" . strip_tags($_POST['urgency']) . "</td></tr>";
$message .= "<tr><td><strong>URL To Change (main):</strong> </td><td>" . $_POST['URL-main'] . "</td></tr>";
$addURLS = $_POST['addURLS'];
if (($addURLS) != '') {
    $message .= "<tr><td><strong>URL To Change (additional):</strong> </td><td>" . strip_tags($addURLS) . "</td></tr>";
}
$curText = htmlentities($_POST['curText']);           
if (($curText) != '') {
    $message .= "<tr><td><strong>CURRENT Content:</strong> </td><td>" . $curText . "</td></tr>";
}
$message .= "<tr><td><strong>NEW Content:</strong> </td><td>" . htmlentities($_POST['newText']) . "</td></tr>";
$message .= "</table>";
$message .= "</body></html>";

我认为这看起来好多了。由于这封电子邮件(理论上)是直接发给您的,了解它将被格式化为易于阅读的格式是否很好?

顾虑

有些人绝对讨厌 HTML 电子邮件。首先,它可能存在安全风险,因为在某些电子邮件客户端中可能在其中运行 JavaScript,这可能有问题。HTML 电子邮件还习惯于更容易被垃圾邮件过滤器捕获。我认为这在这里不太令人担忧,因为这封电子邮件基本上是您为自己创建的。

演示

我更新了演示和下载以使用新的 HTML 电子邮件格式。

查看演示   下载文件

这个表单可能还会出现一两个演示。至少我想在发送电子邮件之前做一个关于将数据写入数据库的演示。电子邮件可能是如此脆弱,因此首先将数据保存到数据库无疑是一个明智之举。