PHP mail()不起作用

时间:2011-06-19 16:50:31

标签: php email

我想用激活邮件编写简单的注册表单等等。但由于某些原因,mail()不发送电子邮件,或者我的3个不同的电子邮件帐户(hotmail,gmail,yahoo)没有收到它们,因此甚至不把它们放在垃圾邮件文件夹中。

代码:

<?php
    $mailto = 'xxx@example.com';
    $subject = 'the subject';
    $message = 'the message';
    $from = 'system@example.net';
    $header = 'From:'.$from;

    if(mail($mailto,$subject,$message,$header)) {
        echo 'Email on the way';
    }
?>

每次输出'途中电子邮件',所以mail()返回true,对吧?我真的没有得到它,我甚至试图关闭我的小金色飞贼(虽然我没有阻止SMTP)。

7 个答案:

答案 0 :(得分:13)

请参阅this article by Jeff Atwood

简而言之:仅仅因为您的代码已将电子邮件发送给邮件传输代理,这并不意味着它将被传递。是的,mail()返回true表示“已接受发送” - 这意味着“看起来像是一封电子邮件,我尝试来传递此信息”,而非“它交付”。甚至the manual for mail() says

  

重要的是要注意,仅仅因为邮件已被接受传递,它 NOT 意味着邮件实际上将到达预定目的地。

Soooo:检查您的MTA(是从本地计算机发送的电子邮件吗?),尝试发送到本地地址(如果该地址是本地地址,是否已发送?),尝试发送电子邮件从您的邮件客户端,使用与PHP脚本相同的设置,尝试发送到较小的邮件主机,允许您关闭反垃圾邮件(它是否在网络外部传送?)。另外,请阅读该文章,并检查那里提到的要点。

答案 1 :(得分:4)

也许您的服务器未配置为处理mail()

<?php
    print phpinfo();  
?>

并查看sendmail_path

答案 2 :(得分:1)

您可能需要在标题中添加正确的行尾字符。它可能是\n\r\n

答案 3 :(得分:0)

检查您的phpinfo和/或php.ini以查找​​您的邮件设置,并确保您可以使用php尝试使用的任何程序发送邮件。如果命令执行但该功能将成功,但不知道邮件是否实际熄灭。

答案 4 :(得分:0)

检查邮件服务器的邮件日志。在Unix-ish系统上,它通常是/ var / log / maillog。在Windows上,谁知道,但应该有一个日志。如果邮件返回TRUE,那么它连接的任何邮件服务器都已接受邮件以便最终传送。之后,mail()不再以任何方式参与,而是由SMTP服务器进行实际交付。

在现实世界中,mail()是你沿着街区走一封信并将其放入邮箱。之后的一切都完全超出了PHP的范围和控制范围。

答案 5 :(得分:0)

如果这是一个Linux服务器,它可能设置为发送到本地邮件队列。当我遇到这个问题时,我通过在指向我们ISP的邮件服务器的linux服务器使用的DNS服务器上添加MX条目来实现它。

答案 6 :(得分:0)

我在Ubuntu上遇到了同样的问题,我在下一个教程后解决了这个问题:

http://www.nixtutor.com/linux/send-mail-with-gmail-and-ssmtp/

我希望它也适合你。