跳转到内容

PHP 编程/邮件

来自维基教科书,开放书籍,开放世界

mail 函数用于通过 php.ini 配置文件中指定的 SMTP 服务器发送电子邮件。

bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])

返回的布尔值将显示电子邮件是否已成功发送。

此示例将发送主题为“主题”、内容为“消息”的邮件到电子邮件地址“[email protected]”。 此外,收件人将看到邮件是从“Example2 <[email protected]>”发送的,并且收件人应该回复到“Example3 <[email protected]>”

 mail(
  "[email protected]", // E-Mail address
  "subject", // Subject
  "message", // Message
  "From: Example2 <[email protected]>\r\nReply-to: Example3 <[email protected]>"  // Additional Headers
 );

不需要将电子邮件地址写成“姓名 <电子邮件>”格式,只需写“电子邮件”即可。

这将发送与第一个示例相同的邮件,但在邮件中包含 From: 和 Reply-To: 头部。 如果你希望收件人能够回复你,则需要包含这些头部。 此外,一些电子邮件提供商会认为某些头部缺失的邮件是垃圾邮件,因此除非包含正确的头部,否则邮件将最终出现在垃圾邮件文件夹中。

重要说明

[编辑 | 编辑源代码]
  • PHP 默认情况下本身没有任何邮件发送功能。 它需要将邮件传递给本地邮件传输代理,例如 sendmail。 这意味着你不能只是运行 PHP 并期望它发送邮件; 你必须安装邮件传输代理。
  • 确保在收件人或主题中没有换行符,否则邮件可能无法正确发送。
  • 但是,额外的头部字段 - 应该始终包含 From: 头部 - 也可能包含其他头部。 在 Windows 上的 PHP 中,每个头部之后应该跟着 \r\n,但在 Unix 版本中,你应该只在头部行之间包含 \n。 不要在最终的额外头部行之后添加 \n 或 \r\n。
  • to 参数不应该是“姓名 <[email protected]>”形式的地址。 mail 命令在与 MTA 交谈时可能无法正确解析它(尤其是在 Windows 下)。

错误检测

[编辑 | 编辑源代码]

尤其是在发送多封邮件时,例如在新闻通讯脚本中,错误检测非常重要。

使用此脚本发送邮件,同时警告错误

 $result = @mail($to, $subject, $message, $headers);

 if ($result) {
     echo "Email sent successfully.";
 } else {
     echo "Email was not sent, as an error occurred.";
 }

使用数组发送到多个地址

[编辑 | 编辑源代码]

在下例中,脚本已经得到一个电子邮件列表,我们只需使用与 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 "You have sent $sent messages";
 echo "However there were $errors errors";

更多信息

[编辑 | 编辑源代码]


华夏公益教科书