我刚刚发现这个mail()
功能不起作用
我在 Debian 下,我安装了 postfix 因为一个朋友告诉我这样做(虽然我没有配置它)。
当我执行 phpinfo() 时,我得到:
sendmail_path /usr/sbin/sendmail -t -i /usr/sbin/sendmail -t -i
但在这个目录中我没有类似的东西sendmail
您是否知道我应该怎么做才能使 mail() 正常工作?
谢谢
答案1
在 Unix 中,大多数程序都依赖 MTA(消息传输代理)进行邮件传输。当程序想要发送消息时,它会执行/usr/sbin/sendmail
并将整个消息发送到 stdin 中。
Sendmail MTA 是第一个以这种方式工作的(现在仍然如此),其他 MTA 也遵循相同的提供程序的约定/usr/sbin/sendmail
。
[在这个答案中,Sendmail 是原始的 MTA,而sendmail
(小写)是/usr/sbin/sendmail
(它随当前使用的所有 MTA 一起提供)。]
PHPmail()
遵循 Unix 传统,只将消息传递给sendmail
可执行文件。这意味着您需要一个 MTA。您已经安装了 Postfix,这很好。但是,它做有一个sendmail
二进制文件,所以如果你没有它/usr/sbin/
,那么你必须在其他地方安装它——也许/usr/local/sbin/
如果从源代码编译?
重新安装 Postfix 可能会解决问题。如果不能,请更新您的问题并提供详细信息,例如您最初是如何安装 Postfix 的。
如果你的sendmail
安装目录不是/usr/sbin/
,那么你必须编辑 PHP 的配置 -- php.ini
。它通常在 中/etc/php5/
,而 Debian 有三其中。(cgi/
用于通用 CGI/FCGI,apache2/
用于 Apache PHP 模块,cli/
用于从命令行使用 PHP 时。)