sendmail 不适用于 chrooted php-fpm 和 nginx
Posted
技术标签:
【中文标题】sendmail 不适用于 chrooted php-fpm 和 nginx【英文标题】:sendmail not working with chrooted php-fpm and nginx 【发布时间】:2020-10-16 19:42:27 【问题描述】:我在 Ubuntu 16.04 上使用 nginx 和 php-fpm 7.4 运行多站点设置。所有网站都已 chroot,一切都像魅力一样运行。除了通过 sendmail 的 mail()。 (php-fpm 版本在这里应该无关紧要,我从 7.1 开始就一直在努力解决这个问题)。
Sendmail 和 postfix 正在运行和配置。此行发送一封电子邮件。
echo "Subject: sendmail test" | /sbin/sendmail -t -i root@example.com
通过 PHP 尝试“相同”不起作用:
mail("foobar@gmail.com","Testing","It's a test.", "root@example.com");
不起作用。邮件()返回假。邮件日志 (/var/log/mail.log) 保持为空。我为 sendmail 配置了日志
php_value[mail.log] = /logs/mail.log
此日志显示通话,例如
[16-Oct-2020 21:17:46 Europe/Berlin] [/htdocs/mail.php:8] 上的 mail(): 收件人:foobar@gmail.com -- 标头:root@example.com -- 主题:测试
我还安装了最新版本的 mini_sendmail (https://acme.com/software/mini_sendmail/),因为我意识到 sendmail 需要十几个文件,我必须将这些文件挂载到我的 chrooted 文件夹中。于是我下载了mini_sendmail,重命名为sendmail,放到chrooted文件夹/var/nginx/example_com/usr/sbin/sendmail
使用 php 从命令行运行这些脚本,php-cgi 也可以:
php-cgi mail.php
php-cgi mail.php
phpinfo() 还显示,一切都已配置(发送邮件路径)。 shell-exec 和 exec 是允许的函数。 /bin/sh 也在 chroot-jail 中。一切似乎都很好。
任何想法,我在这里缺少什么?我什至没有收到错误消息,这可以帮助我。
【问题讨论】:
【参考方案1】:centos 7、nginx 1.18、php-fpm 7.4 也是如此。
从 PHP Web 应用程序 (mantisbt) 发送邮件 - 什么也没发生,所有服务器日志都是空的(nginx error.log、php-fpm error.log、maillog、消息、selinux 审计……)
从命令行发送工作正常:
php -r'mail("user@domain.tld", "Subject", "Body");'
已解决
我们终于发现了一个无效的发件人电子邮件地址 (From:) 导致了问题。从地址修复后,一切正常。
一些有用的链接:
PHP mail function not working on Centos server https://www.mantisbt.org/forums/viewtopic.php?f=3&t=15398
【讨论】:
我也尝试了sender-email-address-trick,但没有成功。你介意更精确一点吗?您提供了发件人地址作为 mail() 的参数? “无效”是什么意思?不适合什么电子邮件地址,在哪里配置?谢谢! 请看一下 email_api.php 中的第 1362 行 github.com/mantisbt/mantisbt/blob/master/core/… 地址无效意味着我们传递了字符串“user.domain.tld”而不是“user@domain.tld”以上是关于sendmail 不适用于 chrooted php-fpm 和 nginx的主要内容,如果未能解决你的问题,请参考以下文章
page.set('content')不适用于phantomjs中的动态内容