PHP mail()函数返回true,但不发送邮件

时间:2014-05-25 16:32:24

标签: php email smtp sendmail

我知道之前曾问过这个问题。

当我调用PHP mail()函数时,它返回true。

我检查了我的php.ini(我正在运行CentOS):

SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On

我在一个论坛中读到我必须安装 sendmail 。所以我安装了它。现在,具有mail()函数的站点不再加载。所以我删除了sendmail,mail()函数再次返回true,但不发送邮件。

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

要发送电子邮件,您需要SMTP服务器(本地或远程)。实际上,您的邮件功能只是将邮件传递给您的SMTP服务器,这是真正发送您的电子邮件的邮件。

在你的php.ini中出现这一行

sendmail_path = /usr/sbin/sendmail -t -i

您应该知道是否使用该配置参数(来自manual):

  

如果设置,则忽略smtp,smtp_port和sendmail_from   执行指定的命令。

但最重要的是你只需卸载 sendmail ,这样你就可以发现你的邮件无处可去。我知道 sendmail 给你一些问题,可能是配置问题,但现在你的php.ini配置错了。

如何解决?

  • 开始从php.ini中删除 sendmail_path 参数。

  • 安装一个简单的配置SMTP服务器,如 postfix

  • 验证后缀是否正在侦听端口22:

  

netstat -lnt

  • 尝试从您的php mail()函数发送邮件

  • 验证您的邮件是否已正确发送(请检查 /var/log/mail.log /var/log/mail/mail.log 文件)

  • 您还可以验证邮件不在后缀队列中:

  

postqueue -f

答案 1 :(得分:2)

我遇到了类似的问题; mail()wp_mail()个函数都返回TRUE,但没有电子邮件发送到我的 xyz@yahoo.com 电子邮件帐户。

事实证明,雅虎正在阻止这些电子邮件成为垃圾邮件。我没有在我的表单上实现验证码,因此许多垃圾邮件被发送到雅虎,这就是他们阻止电子邮件的原因。电子邮件已成功发送,但雅虎将其标记为垃圾邮件。

确保这不是您的问题。

答案 2 :(得分:0)

请检查您的DNS, 我在localhost上测试时会遇到同样的问题,但是在真正的主机上工作。 问题是假DNS,您的电子邮件被谷歌阻止。 如果您使用其他电子邮件服务(例如:雅虎邮件)进行测试,您将收到垃圾邮件。 我在检查邮件日志后找到了它

答案 3 :(得分:-1)

我在设置smtp时出现问题,所以我最终使用了gmail。您可以按照指示here发送邮件给PEAR MAIL:

$from = "NoReply <noreply@random.com>";
$to = "someone <someone@somemail.com>";
$subject = "my subject";
$body = "my body";
$host = "ssl://smtp.gmail.com";
$port = "465";
$username = "gmailaccount@gmail.com";
$password = "gmailpass";

$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);

如果您使用gmail,您的$ from将被用于发送它的电子邮件地址替换。