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

Flo*_*ian 6 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
Run Code Online (Sandbox Code Playgroud)

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

任何的想法?

Vic*_*uez 6

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

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

sendmail_path = /usr/sbin/sendmail -t -i
Run Code Online (Sandbox Code Playgroud)

如果您使用该配置参数(来自手册) ,您应该注意:

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

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

怎么解决呢?

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

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

  • 验证 postfix 正在侦听端口 22:

netstat -lnt

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

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

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

后队列-f