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 上使用 nginxphp-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的主要内容,如果未能解决你的问题,请参考以下文章

媒体查询不适用于 Firefox

joomla 组件不适用于我的主机帐户

page.set('content')不适用于phantomjs中的动态内容

curl 不适用于 wamp 服务器的 php 5.4.3

电话没有使用正则表达式进行验证-Ph. Format (974) 041-0475 [重复]

将 sendmail 用于 HTML 正文和二进制附件