Как можно разрешить apache отправлять электронную почту?
У меня есть виртуальная машина CentOS 6.2 под управлением Apache 2.2 и PHP 5.3, с которой я пытаюсь отправлять электронную почту с помощью функции mail() PHP. Я могу отправлять электронную почту из CLI без проблем, но когда PHP пытается это сделать, он терпит неудачу. В журнале sendmail есть следующее:
Oct 9 11:42:03 localhost sendmail[3080]: NOQUEUE: SYSERR(apache): can not chdir(/var/spool/clientmqueue/): Permission denied
Похоже, что Apache не имеет разрешения на это, но я не уверен, как это исправить. Я нашел много дискуссий об этом, но ничего достаточно конкретного для того, что я делаю, что я мог бы использовать. Любая помощь была бы оцененный.
Спасибо!
5 ответов:
Сначала вы должны проверить, правильно ли разрешение. Вот разрешение ниже в моей системе
# ls -l /usr/sbin/sendmail.sendmail-r-xr-sr-x root smmsp /usr/sbin/sendmail.sendmail
# ls -l /var/spool/clientmqueuedrwxrwx--- smmsp smmsp /var/spool/clientmqueueЕсли ваши разрешения или права собственности неверны, измените их с помощью chown и chmod.
Если вышеизложенное верно, то отключите selinux или, если вы хотите, чтобы selinux был включен, используйте chcon для установки правильного контекста selinux.
Для временного отключения selinux используйте
#setenforce 0
Selinux может вызвать проблему, чтобы проверить запуск:
getsebool -a | grep mailЕсли он отображается как ниже, то это selinux:
allow_postfix_local_write_mail_spool --> offВы можете отключить его, но если вы хотите сохранить его (и вы должны, поскольку он обеспечивает дополнительный уровень безопасности) , вы должны сделать что-то еще:
setsebool -P httpd_can_sendmail onЭто позволит httpd отправлять электронные письма, как при использовании php mail ().
Ненавижу некро это, но ни одно из решений здесь не сработало для меня. Я очень мало знаю о SELinux, но в итоге обнаружил проблему с этим (на CentOS 6):
getsebool httpd_can_sendmailКоторый сказал мне, что он отключен. Исправлено с помощью
setsebool httpd_can_sendmail 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, затем попробуйте:
getsebool -a | grep mail allow_postfix_local_write_mail_spool --> off setsebool -P httpd_can_sendmail onЭта команда работает на меня.
Comments