J'ai une machine virtuelle CentOS 6.2 exécutant Apache 2.2 et PHP 5.3 que je tente d'envoyer un courrier électronique à l'aide de la fonction mail () de PHP. Je peux envoyer des e-mails à partir de la CLI sans problèmes, mais lorsque PHP essaie, il échoue. Dans le journal de sendmail se trouve ce qui suit:
Oct 9 11:42:03 localhost sendmail[3080]: NOQUEUE: SYSERR(Apache): can not chdir(/var/spool/clientmqueue/): Permission denied
Il semble qu'Apache n'ait pas la permission de faire cela, mais je ne sais pas comment le réparer. J'ai trouvé beaucoup de discussions à ce sujet mais rien de suffisamment spécifique à ce que je fais que je pourrais utiliser. Toute aide serait appréciée. Merci!
Vous devez d'abord vérifier si les permissions sont correctes. Voici l'autorisation ci-dessous dans mon système
# 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
Si vos autorisations ou votre propriété sont erronées, modifiez-les à l'aide de chown et chmod.
Si ce qui précède est correct, désactivez selinux ou, si vous souhaitez activer Selinux, utilisez chcon pour définir le contexte selinux approprié.
Pour désactiver selinux, utilisez temporairement #setenforce 0
Selinux peut être à l'origine du problème, pour vérifier son exécution:
getsebool -a | grep mail
Si cela s'affiche comme ci-dessous, c'est selinux:
allow_postfix_local_write_mail_spool --> off
Vous pouvez le désactiver, mais si vous voulez le garder (et vous devriez le faire, car cela fournit une couche de sécurité supplémentaire), vous devriez faire autre chose:
setsebool -P httpd_can_sendmail on
Cela permettra au httpd d'envoyer des emails, comme lorsque vous utilisez php mail ().
Déteste necro cela, mais aucune des solutions ici ne fonctionnait pour moi. Je connais très peu de choses sur SELinux, mais j'ai fini par découvrir le problème avec ceci (sur CentOS 6):
getsebool httpd_can_sendmail
Ce qui m'a dit que c'est désactivé. Fixe avec
setsebool httpd_can_sendmail 1
getsebool -a | grep mail
allow_postfix_local_write_mail_spool --> off
setsebool -P httpd_can_sendmail on
Cette commande fonctionne pour moi.