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

dev*_*lis 11 php linux apache sendmail centos

我有一个运行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
Run Code Online (Sandbox Code Playgroud)

似乎Apache没有权限这样做,但我不知道如何解决它.我已经找到了很多关于这个的讨论,但没有具体到我正在做的事情,我可以使用.任何帮助,将不胜感激.谢谢!

Flo*_*ima 31

Selinux可能导致问题,验证运行:

getsebool -a | grep mail
Run Code Online (Sandbox Code Playgroud)

如果它显示为低于selinux:

allow_postfix_local_write_mail_spool --> off
Run Code Online (Sandbox Code Playgroud)

您可以禁用它,但如果您想保留它(并且您应该提供额外的安全层),您应该执行其他操作:

setsebool -P httpd_can_sendmail on
Run Code Online (Sandbox Code Playgroud)

这将允许httpd发送电子邮件,就像使用php mail()时一样.

  • -P选项使其永久化,因此重启后它将再次开启:) (5认同)
  • 我只使用"setsebool -P httpd_can_sendmail on"并解决了这个问题.谢谢 (2认同)

jma*_*ate 12

讨厌这个,但这里没有一个解决方案适合我.我对SELinux知之甚少,但我最终发现了这个问题(在CentOS 6上):

getsebool httpd_can_sendmail
Run Code Online (Sandbox Code Playgroud)

哪个告诉我它被禁用了.固定的

setsebool httpd_can_sendmail 1
Run Code Online (Sandbox Code Playgroud)


Ran*_*ban 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