Mailcatcher:PHP mail()函数返回false

时间:2014-07-14 16:52:10

标签: php email mailcatcher

我将尝试描述我的问题:

在本地环境中调试传出电子邮件我安装了mailcatcher(http://mailcatcher.me/),但是在捕获从web发送的邮件时遇到了一些问题。如果我运行只包含一个mail()调用的脚本,一切都很好,我可以在mailcatcher 127.0.0.1:1080中看到发送的电子邮件。但是当我尝试从Web浏览器访问相同的脚本时,mail()函数返回false,浏览器中没有显示任何错误,错误日志中没有任何内容。在邮件日志中,即使我可以看到mail()函数的调用。

我不确定,可能是我的nginx / php-fpm配置错误,或权限有问题。

selinux被禁用。

如果您知道解决方案,请提供帮助。

提前致谢

4 个答案:

答案 0 :(得分:5)

我在ubuntu 14.04上面临同样的问题。

/etc/php5/cli/php.ini/etc/php5/fpm/php.ini具有相同的sendmail_path配置,但只有php-cli可以发送电子邮件。

对于我的环境,Mailcatcher适用于远程服务器,我使用catchmail命令与其联系。

以下是我使用的sendmail_path

sendmail_path = /usr/bin/env catchmail --smtp-ip mailcatcher-ip -f address@example.com

对于fpm php.ini文件,我必须指定catchmail的完整路径才能使邮件功能正常工作:

sendmail_path = /usr/bin/env /usr/local/bin/catchmail --smtp-ip mailcatcher -f address@example.com

答案 1 :(得分:2)

使用php-fpm,它可以使用提供的RVM(?)包装脚本。

sendmail_path = /usr/local/rvm/wrappers/default/catchmail

答案 2 :(得分:1)

如果您使用Mac OS Sierra或更高版本:
这是int main() { const int Length = 10; const int Height=5; std::string gap; for (int i = 0; i < Height; i++) { for (int j = i; j < Length-i; j++) { cout << "*"; } cout << endl; gap=gap+' '; cout<<gap; } } 的正确位置:

更改catchmail
通过sendmail_path = /usr/bin/env catchmail -f catcher@mailcatcher.me

答案 3 :(得分:0)

在使用PHP-FPM和PHP 5.6的CentOS 7上,我发现我必须修改/etc/php-fpm.d/www.conf而不是将ini文件添加到/etc/php.d或修改/etc/php.ini。这也需要完整的路径,如@Alexis N-o的答案。

php_admin_value[sendmail_path] = '/usr/bin/env GEM_PATH=/usr/share/gems:/usr/local/share/gems:/usr/share/rubygems:$HOME/.gem/ruby /usr/local/bin/catchmail --smtp-ip 127.0.0.1 --smtp-port 1025 -f mailcatcher@example.com'

更新:最近我发现在某些环境下将php-fpm作为apache运行时,GEM_PATH为nil。无论我尝试了什么(/ etc / gemrc),除了注入GEM_PATH作为此命令的一部分之外,我无法做到。