Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP mail()不';行不通_Php_Email - Fatal编程技术网

PHP mail()不';行不通

PHP mail()不';行不通,php,email,Php,Email,我想脚本与激活邮件等一个简单的登记表。但由于某些原因,mail()不发送电子邮件,或者我的3个不同的电子邮件帐户(hotmail、gmail、yahoo)不接收电子邮件,因此甚至不将它们放在垃圾邮件文件夹中 代码: 每次它输出“途中的电子邮件”时,mail()都会返回true,对吗?我真的不明白,我甚至尝试关闭我的小飞贼(虽然我没有阻止SMTP)。检查您的phpinfo和/或php.ini以了解您的邮件设置,并确保您可以使用php试图使用的任何程序发送邮件。如果命令执行,但不知道邮件是否实际

我想脚本与激活邮件等一个简单的登记表。但由于某些原因,mail()不发送电子邮件,或者我的3个不同的电子邮件帐户(hotmail、gmail、yahoo)不接收电子邮件,因此甚至不将它们放在垃圾邮件文件夹中

代码:



每次它输出“途中的电子邮件”时,mail()都会返回true,对吗?我真的不明白,我甚至尝试关闭我的小飞贼(虽然我没有阻止SMTP)。

检查您的phpinfo和/或php.ini以了解您的邮件设置,并确保您可以使用php试图使用的任何程序发送邮件。如果命令执行,但不知道邮件是否实际发出,则该函数将成功。

检查邮件服务器的邮件日志。在Unix ish系统上,它通常是/var/log/maillog。在Windows上,谁知道呢,但应该有一个日志。如果邮件返回TRUE,则无论它连接到哪个邮件服务器,都已接受该邮件以进行最终传递。在此之后,
mail()
不再以任何方式参与,实际的传递由SMTP服务器完成


在现实世界中,
mail()
就是你把一封信沿着街区走下去,然后扔进邮箱。之后的所有内容都完全超出了PHP的范围和控制范围。

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

请参阅

简而言之:仅仅因为您的代码已经将电子邮件传递给邮件传输代理,并不意味着它将被传递。是的,
mail()。甚至:

重要的是要注意,仅仅因为邮件被接受交付,并不意味着邮件将实际到达预定目的地


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

可能您的服务器未配置为处理
邮件()



看看
sendmail\u path

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

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


我希望它也能对你起作用。

你是在你的本地计算机上还是在真正的网络主机上进行测试?如果它在你的本地计算机上,很可能它没有配置为发送/接收邮件。sendmail是如何在你的php.ini文件中设置的?这是在*nix还是在Windows上进行的?@ETWW Dave:我敢肯定你会在最近的一个comp上找到实际的
sendmail
是的,我怀疑电子邮件被下一个SMTP服务器拒绝。@Piskvor我管理着大约30个最近的ish服务器,这些服务器都运行实际的
sendmail
…)但是,是的,不管使用的SMTP代理是什么,
php.ini
设置直到今天仍然被称为
sendmail\u path
下一步是什么?我的是/usr/local/bin/phpsendmail问题是关于通过php语言发送邮件。
<?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';
    }
?>
<?php
    print phpinfo();  
?>