我有一台运行Apache 2.2和PHP 5.3的CentOS 6.2虚拟机,我正试图通过PHP的mail()函数发送电子邮件。我可以毫无问题地从CLI发送电子邮件,但是当PHP尝试失败时。在sendmail日志中有以下内容:
Oct 9 11:42:03 localhost sendmail[3080]: NOQUEUE: SYSERR(apache): can not chdir(/var/spool/clientmqueue/): Permission denied
似乎Apache没有权限这样做,但我不确定如何修复它。我已经找到了很多关于这个的讨论,但没有具体到我正在做的事情,我可以使用。任何帮助,将不胜感激。 谢谢!
答案 0 :(得分:31)
Selinux可能会导致此问题,以验证运行:
getsebool -a | grep mail
如果它显示为低于selinux:
allow_postfix_local_write_mail_spool --> off
您可以禁用它,但如果您想保留它(并且您应该提供额外的安全层),您应该执行其他操作:
setsebool -P httpd_can_sendmail on
这将允许httpd发送电子邮件,就像使用php mail()时一样。
答案 1 :(得分:12)
讨厌这个,但这里没有一个解决方案适合我。我对SELinux知之甚少,但我最终发现了这个问题(在CentOS 6上):
getsebool httpd_can_sendmail
哪位告诉我它被禁用了。用
修复setsebool httpd_can_sendmail 1
答案 2 :(得分:4)
首先,您必须检查权限是否正确。以下是我系统中的权限
# ls -l /usr/sbin/sendmail.sendmail
-r-xr-sr-x root smmsp /usr/sbin/sendmail.sendmail
# ls -l /var/spool/clientmqueue
drwxrwx--- smmsp smmsp /var/spool/clientmqueue
如果您的权限或所有权有误,请使用chown和chmod进行更改。
如果以上是正确的,则禁用selinux,或者如果要启用selinux,请使用chcon设置正确的selinux上下文。
要禁用selinux,请暂时使用#setenforce 0
答案 3 :(得分:1)
您可能启用了SELinux。
http://selinuxproject.org/page/Main_Page
您可以执行以下操作检查SELinux状态:
sestatus
您应该看到类似的内容:
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
您可以通过以下方式暂时关闭SELinux:
echo 0 >/selinux/enforce
并重新开始
echo 1 >/selinux/enforce
如果你做温度。关闭它,不安装RPM或进行更改。我发现这可能导致重新启用它的问题。
如果要永久禁用SELinux,请尝试:
答案 4 :(得分:0)
getsebool -a | grep mail
allow_postfix_local_write_mail_spool --> off
setsebool -P httpd_can_sendmail on
这个命令对我有用。