can't use mail() on nginx but can send mail on console using msmtp

The Wolf asked:

I setup msmtp on my centos 6, i know its working fine because I can send email using bash command:

echo -e "Subject: Test MailrnrnThis is a test mail" |msmtp --debug --from=default -t username@gmail.com

then, I am moving on to allowing nginx to also allow the use of msmtp, in my php.ini this is my sendmail path:

sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc --logfile /var/log/msmtp.log -a gmail -t"

then, I tried sending using this:

<?php
if(mail("receipient@domain.com","A Subject Here","Hi there,nThis email was sent using PHP's mail function."))
print "Email successfully sent";
else
print "An error occured";
?>

But, it keeps failing, I am starting to think it is because of the permission because nothing was written in the logs, here are the permissions I have

for msmtprc @ /etc/

[root@xxxx ~]# cd /etc/
[root@xxxx etc]# ls -l
-rw-------  1 nginx   nginx     248 Apr  2 14:55 msmtprc

for /var/log

-rw-r--r-- 1 nginx  nginx    788 Apr  2 14:56 msmtp.log

Is it permission issue? or other else. to whom should I chown is it for nginx? or other else?

Hope somebody can help, I’d been doing trial and error for hours and it has been frustrating. Thanks!

My answer:


Since CentOS 6.6, SELinux policies that applied to Apache are now also applied to nginx and php-fpm in the same way. Thus you need to use the right SELinux boolean to allow the web server to send mail.

setsebool -P httpd_can_sendmail 1

View the full question and answer on Server Fault.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.