使用PHP的mail()可以从命令行运行,而不是从Apache运行,任何想法为什么?

时间:2015-05-20 00:38:14

标签: php macos apache email xampp

我在OS X(Yosemite)上使用XAMPP,使用PHP的标准mail()函数通过Sendmail发送(OS X别名用于Postfix)。我可以通过其他方式发送电子邮件,例如在Postfix配置文件中指定SMTP服务器或使用PHP类,但希望让基本mail()函数首先运行 - 获得了许多依赖它的遗留网站。

命令行和Apache的PHP都作为同一个用户运行(通过whoami函数使用exec()进行测试,以及创建文件和查看权限)。它们都使用相同的php.ini文件。

当我从终端运行PHP脚本时,它会暂停一下,我看到它在邮件日志文件中处理,我在目的地收到电子邮件,mail()函数返回{{1} }。

当我通过Apache运行脚本时,它暂停了一下,邮件日志没有命中,没有电子邮件到达,函数返回true并且在任何地方都没有错误...无论如何我改变报告级别或查看各种日志文件。它似乎悄然失败了。

是否有什么东西阻止Apache在后台与邮件服务器进行交互?喜欢OS X中的东西?或者PHP中的错误?或XAMPP独有的东西?我尝试升级到XAMPP的最新版本(擦除了我的所有配置文件并破坏了DBs grrr),但结果相同。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案,无论出于什么原因,php.ini中的sendmail路径必须看起来像这样才能让PHP的邮件在OS X Yosemite上通过Apache工作:

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

感谢所有试图找到答案的人。

答案 1 :(得分:0)

从您的网络服务器调用的PHP可以与命令行PHP的配置完全不同,因为mod_php是一个单独编译的模块。它不会调用您通过终端访问的标准php命令。

使用mod_php时,请求/响应通过apache。

设置可以通过多种方式改变(并且肯定会有所不同):   - 不同的php.ini(确保你真的使用相同的)   - 从.htaccess文件设置的指令  - 环境变量   - Apache配置可以(并确实)改变php的行为。

...也

OSX捆绑了PHP。确保在终端中,您实际上正在运行从XAMPP调用php.exe(而不是捆绑的那个)。

调试:

  • 检查您的maillog并查看其中显示的错误(邮件日志应位于/var/log/maillog
  • 检查邮件功能结果的var_dump

    var_dump(mail('someone@example.com', 'foo', 'msg'));

  • 检查sendmail路径