如何允许apache发送电子邮件?

时间:2012-10-09 16:58:26

标签: php linux apache centos sendmail

我有一台运行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没有权限这样做,但我不确定如何修复它。我已经找到了很多关于这个的讨论,但没有具体到我正在做的事情,我可以使用。任何帮助,将不胜感激。 谢谢!

5 个答案:

答案 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上下文。

http://docs.fedoraproject.org/en-US/Fedora/13/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Contexts_Labeling_Files.html

要禁用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,请尝试:

https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-Enabling_and_Disabling_SELinux.html

答案 4 :(得分:0)

getsebool -a | grep mail
allow_postfix_local_write_mail_spool --> off
setsebool -P httpd_can_sendmail on

这个命令对我有用。