Sendmail管道到PHP:无法打开输入文件。

7
我已经安装了sendmail并希望将传入的电子邮件导向php。每当我发送电子邮件到我的服务器时,我都会收到一封带有错误消息的电子邮件: “could not open input file: /root/fw/catcher.php 554 5.3.0 unknown mailer error 1” 我认为catcher.php的权限出了问题,但是我自己无法解决。sendmail已安装,并且我已添加别名。
root: "|/usr/bin/php /root/fw/catcher.php"

权限(在执行chmod 777后;我尝试了chmod 777chmod 755但都不能正常工作):

drwxrwxrwx 2 root root 4096 Jul 20 14:27 fw
-rwxrwxrwx 1 root root   45 Jul 20 14:27 catcher.php

catcher.php(将行结束符转换为Unix样式):

#!/usr/bin/php
<?php echo 'Test'; exit(0); ?>

我在命令行中执行我的PHP文件,一切都很顺利。以下所有命令都可以使用:

/usr/bin/php /root/fw/catcher.php
/usr/bin/php7.3 /root/fw/catcher.php
php /root/fw/catcher.php
php7.3 /root/fw/catcher.php

我认为sendmail的权限存在问题。

首先,我建议您使用一个 shell 脚本,并将 php 文件名传递给它。请参考以下链接:https://serverfault.com/questions/261191/how-to-run-a-script-when-a-mail-arrives-in-mail-server-debian 和 http://musicalgeometry.com/p/1473 - Tarun Lalwani
这个有任何更新吗? - Tarun Lalwani
日志文件中报告了什么? - AnFi
2个回答

1
"无法打开输入文件"错误意味着由于某种原因无法读取该文件。
请按照以下步骤检查:
  1. 将行尾转换为Unix风格

我不知道您如何检查此项,但您可以尝试使用dos2unix,在此链接中描述的方法重新进行此操作

dos2unix catcher.php > newcatcher.php

然后比较文件大小。

  1. 可能是因为BOM破坏了脚本,如此处所述,shebang行"#!/usr/bin/php"告诉系统在调用这样的脚本时需要运行哪个解释器。

如果脚本以UTF-8编码,人们可能会想在开头包含BOM。但实际上,"#!"字符不仅仅是字符。它们实际上是由两个ASCII字符组成的魔数。如果在这些字符之前放置一些东西(比如BOM),那么文件看起来就像有一个不同的魔数,这可能会导致问题。

该脚本将通过cli运行,因为您明确告诉它要使用哪个解释器:phpphp7.3

php /root/fw/catcher.php
php7.3 /root/fw/catcher.php

要从文件开头移除BOM,请尝试使用this

dos2unix catcher.php

尝试在不使用php或php7.3可执行文件的情况下,将/root/fw/catcher.php作为shell脚本运行。从终端运行:

./root/fw/catcher.php

0

您是否检查了SELinux是否已启用并强制执行? 您可以使用getenforce命令查看此信息。

如果返回结果为“强制执行(Enforcing)”,则有几种方法可以解决。 您可以使用setenforce Permissive禁用SELinux强制执行,或创建一个策略以允许Apache运行sendmail。

要创建这样的策略,最简单的方法是使用audit2allow工具,该工具是policycoreutils-python的一部分 - 因此如果未安装audit2allow,请先安装它。 然后,检查/var/log/audit.log 以查看是否存在有关无法运行sendmail的错误。 这些错误行可以通过管道符号传递给audit2allow,以创建可以使用semodule -i <module.pp>启用的策略文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接