邮件

邮件功能

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 来发送邮件;必须安装邮件传输代理。
  • 确保在 tosubject 中没有换行符,否则邮件可能无法正确发送。
  • 但是,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 个错误";

更多信息

最后修改: 2025年01月9日 星期四 23:38