我在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),但结果相同。有什么想法吗?
答案 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(而不是捆绑的那个)。
/var/log/maillog
)检查邮件功能结果的var_dump
:
var_dump(mail('someone@example.com', 'foo', 'msg'));
检查sendmail路径