我在OS X (Yosemite)上使用XAMPP,使用PHP的标准mail()
函数通过Sendmail (OS X别名Postfix)发送。我可以用其他方式发送电子邮件,比如在Postfix配置文件中指定SMTP服务器或使用PHP类,但我想先让基本的mail()
功能工作-有很多传统网站依赖它。
命令行和Apache的PHP都作为同一个用户运行(通过exec()
函数使用whoami
进行测试,以及创建文件和查看权限)。它们都使用相同的php.ini
文件。
当我从终端运行PHP脚本时,它暂停了一会儿,我看到它在邮件日志文件中被处理,我在目的地得到电子邮件,mail()
函数返回true
。
当我通过Apache运行脚本时,它暂停了一点,邮件日志上没有命中,没有电子邮件到达,函数返回false
,没有任何错误…无论我如何更改报告级别或查看各种日志文件。它似乎只是悄悄地失败了。
是否有什么东西阻止Apache在后台与邮件服务器交互?就像OS X里的东西?或者可能是PHP中的错误?还是XAMPP独有的东西?我尝试升级到最新版本的XAMPP(它删除了我所有的配置文件并破坏了db grrr),但结果相同。什么好主意吗?
我找到了解决方案,出于某种原因PHP。ini中的sendmail路径必须是这样的这样PHP邮件才能通过OS X Yosemite上的Apache:
sendmail_path = "env -i /usr/sbin/sendmail -t -i"
感谢所有努力寻找答案的人
从web服务器调用的PHP可以配置与命令行PHP非常不同,因为mod_php是一个单独编译的模块。它不调用通过终端访问的标准php命令。
当使用mod_php时,请求/响应通过apache。
设置可以有很多不同的方式(它肯定是不同的):-不同的php.ini(确保你使用的是相同的)-指令设置从。htaccess文件—环境变量Apache的配置可以改变php的行为
也……
OSX与PHP捆绑在一起。请确保,在终端中,您正在运行从XAMPP调用php.exe(而不是捆绑的那个)。
调试:
- 检查你的邮件日志,看看有什么错误出现(邮件日志应该在
/var/log/maillog
) -
查看邮件功能结果的
var_dump
:var_dump(mail('someone@example.com', 'foo', 'msg'));
-
检查sendmail路径