在PHP中使用mail()获取没有错误

时间:2015-05-05 19:57:49

标签: php email

在PHP中我错误地使用mail()函数时我没有收到错误作为返回值:

ini_set("display_errors", "1");
error_reporting(E_ALL);
if(mail(1,2,3))
  echo 'true';
else
  echo 'false';

上面没有PHP错误,回显是true

所以似乎接受了明显错误参数的“邮件”:“Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.”(php.net)。

仅当我将第三行更改为

if(mail(1,2))

我收到PHP警告并打印字符串false

以上两种情况在没有安装邮件服务器的服务器或具有正确工作的邮件服务器的服务器上具有相同的结果。这是“按设计工作”还是我误用/误解了mail() - 函数的返回值?

如果“按设计工作”是否有更深层次的原因来检查返回值?

4 个答案:

答案 0 :(得分:4)

如果服务器已接受邮件以进行传递,则

mail()将返回true。这并不意味着要发送的电子邮件有效或将被发送。它只是字面意思服务器已接受邮件。这就是为什么你每天都会看到mail()无法正常工作的原因,因为它返回true但邮件从未收到过。 true值并不意味着交付或甚至任何有效。它只是意味着服务器接受了发送电子邮件的请求。

答案 1 :(得分:1)

不确定你甚至在问:

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

Bare minimum是3个参数。

如果邮件成功接受传递,则返回TRUE,否则返回FALSE。

http://php.net/manual/en/function.mail.php

答案 2 :(得分:0)

@Woox mail()函数允许你从php网站发送邮件(即使你没有邮件服务器)

这里的一切都很好解释: www.w3schools.com/php/func_mail_mail.asp

答案 3 :(得分:0)

与@ JohnConde的答案有关的一些额外解释,因为他们解释了如何,而不是为什么

mail()不对其给出的参数做任何假设。

mail(1,2,3)将传递1的电子邮件地址,2的主题和3的邮件。显然电子邮件地址无效,但mail()并不关心,这是邮件服务器要处理的。

mail(1,2)遗漏了一条消息。邮件服务器不接受此。