PHP编程
Completion requirements
邮件
邮件功能
mail
函数用于通过在 php.ini
配置文件中指定的 SMTP 服务器发送电子邮件。
bool mail ( string $to, string $subject, string $message [, string $additional_headers [, string $additional_parameters ]])
返回的布尔值表示电子邮件是否成功发送。
这个示例将发送主题为 "subject",内容为 "message" 的邮件到电子邮件地址 "example@domain.tld"。此外,收件人将看到邮件来自 "Example2 example2@domain.tld",并且回复应该发送到 "Example3 example3@domain.tld"。
mail(
"example@domain.tld", // 收件人地址
"subject", // 主题
"message", // 内容
"From: Example2 <example2@domain.tld>\r\nReply-to: Example3 <example3@domain.tld>" // 附加头部
);
在发送邮件时,并不强制要求邮件地址采用 "Name " 格式,你可以直接写 "email"。
上述示例发送的邮件与第一个示例相同,但它在邮件中包含了 From: 和 Reply-To: 头部。如果你希望收件人能够回复你的邮件,必须包含这些头部。并且,一些邮件提供商会认为如果缺少某些头部,邮件可能是垃圾邮件,因此如果不包含正确的头部,邮件将可能进入垃圾邮件文件夹。
重要说明
- 默认情况下,PHP 本身并不具备发送邮件的能力。它需要通过本地的邮件传输代理(如
sendmail
)来发送邮件。这意味着你不能单独运行 PHP 来发送邮件;必须安装邮件传输代理。 - 确保在
to
或subject
中没有换行符,否则邮件可能无法正确发送。 - 但是,
additional_headers
字段——通常需要包括From:
头部——也可以包含其他头部。在 Windows 上的 PHP 中,每个头部后应该跟随\r\n
,而在 Unix 系统上,头部行之间应该仅使用\n
。不要在最后一个附加头部行后加上\n
或\r\n
。 to
参数不应使用 "Name someone@example.com" 格式的地址,因为邮件命令在与 MTA 通信时可能无法正确解析此格式(特别是在 Windows 环境中)。
错误检测
尤其是在发送多个邮件时,例如在编写邮件脚本时,错误检测非常重要。
使用以下脚本发送邮件时,可以在发生错误时进行警告:
$result = @mail($to, $subject, $message, $headers);
if ($result) {
echo "邮件发送成功。";
} else {
echo "邮件发送失败,发生了错误。";
}
向多个地址发送邮件(使用数组)
在以下情况下,脚本已经有了邮件地址的列表,我们可以通过 PHP 循环结合 MySQL 查询结果来逐个发送邮件。以下脚本会尝试向数组中的每个邮件地址发送邮件,直到所有邮件都发送完为止:
while ($row = mysql_fetch_assoc($result)) {
mail($row['email'], $subject, $message, null, "-f$fromaddr");
}
如果我们将错误检测集成到多个邮件脚本中,得到的脚本如下:
$errors = 0;
$sent = 0;
while ($row = mysql_fetch_assoc($result)) {
$result = "";
$result = @mail($row['email'], $subject, $message, null, "-f$fromaddr");
if (!$result) {
$errors = $errors + 1;
}
$sent = $sent + 1;
}
echo "你已经发送了 $sent 封邮件";
echo "然而有 $errors 个错误";
更多信息
Last modified: Thursday, 9 January 2025, 11:38 PM