views:

653

answers:

3

I'm trying to figure out why the mail function in PHP fails when called via web browser (i.e. apache), but I can run the same script from the command line using

php -f mailtest.php

This is one of my client's Fedora servers, so I don't grok it completely, but I do have root access should I need to change anything.

from php.ini:

sendmail_path = /usr/sbin/sendmail -t -i

Not sure if this could matter, but /usr/sbin/sendmail is a symlink to /etc/alternatives/mta, which is a symlink back to /usr/sbin/sendmail.sendmail. FWIW the apache user does have permission to run sendmail (tested sendmail directly from the command line).

OS: Fedora Core 7 Linux (kernel 2.6.23.17)
Apache: 2.2.8
PHP: 5.2.6

Any help here will be greatly appreciated!

A: 

Anything in apache's error_log? Is PHP being run as an apache module or a CGI binary?

EDIT: Hmmm... nothing in the error log. What does the call to mail(...) return? Anything interesting in the mail log? This will vary depending on the MTA, often /var/log/maillog

EDIT 2: Is safe_mode turned on and are you using the mail() function's *additional_parameters* ?

Josh
nothing in the error log.PHP is being run as an apache module.
matt
also I've turned on all errors (i.e. error_reporting(E_ALL); ) and don't see any errors or warnings there either.
matt
A: 

Is it a user permissions error? Your account and the one used to execute PHP scripts may have different privileges.

Rob Drimmie
All users have permission to execute sendmail. I confirmed by running sendmail as the apache user.
matt
+1  A: 

I found the problem. SELinux was preventing apache from being able to use sendmail. To diagnose, I used

$ sestatus -b | grep sendmail  
httpd_can_sendmail                   off

Then to actually fix the problem:

$ restorecon /usr/sbin/sendmail.sendmail
$ setsebool -P httpd_can_sendmail 1

Read more about it here.

matt
Glad you figured it out. You should accept your own answer -- grants you rep, a badge, and lets others know the question is answered.
Josh