跳至内容

PHP 编程/邮件

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

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

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

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

此示例将使用主题为“subject”的消息“message”发送至电子邮件地址“[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
 );

不需要将电子邮件地址写成“Name <email>”格式,您可以直接写“email”。

这将发送与第一个示例相同的消息,但在消息中包含 From: 和 Reply-To: 头部。如果您希望发送电子邮件的人能够回复您,则需要此操作。此外,一些电子邮件提供商会在缺少某些头部的情况下将邮件视为垃圾邮件,因此,除非您包含正确的头部,否则您的邮件将最终进入垃圾邮件文件夹。

重要注意事项

[编辑 | 编辑源代码]
  • 默认情况下,PHP 本身不具有任何邮件发送功能。它需要将邮件传递给本地邮件传输代理,例如 sendmail。这意味着您不能只运行 PHP 并期望它发送邮件;您必须安装邮件传输代理。
  • 确保在收件人或主题中没有任何换行符,否则邮件可能无法正常发送。
  • 但是,附加的头部字段(应始终包含 From: 头部)也可以包含其他头部。在 Windows 上的 PHP 中,每个头部后面都应跟着 \r\n,但在 Unix 版本中,您只应在头部行之间包含 \n。不要在最后的附加头部行之后放置 \n 或 \r\n。
  • to 参数不应以“Name <[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";

更多信息

[编辑 | 编辑源代码]


华夏公益教科书