在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() - 函数的返回值?
如果“按设计工作”是否有更深层次的原因来检查返回值?
答案 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。
答案 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)
遗漏了一条消息。邮件服务器不接受此。