Thank you. This pointed me in the right direction. Of course! The
obvious thing was to try mail() in a script run by the webserver. So I
made a PHP file that tried to mail me and it didn't work. I realized
that the problem stemmed form my confusion about the chroot of the
php-fpm process. All its paths are absolute paths (socket, log file, pid
file) but when it was running the actual PHP script, the workers were
running in the chroot. So when PHP tried to exec the system's mailer, it
didn't exist. I would have expected that somewhere, in some PHP log
file, I would have seen something to the effect of "/usr/sbin/sendmail
not found", but I guess that would have been too easy. The mail()
function's return value may have also been a clue had it not been empty
when I tried to log it.
Or, any different setting between cli/php.ini and fpm/php.ini?
Now I have to either chroot the process and have the mailer and its
dependencies available, or not chroot but then the SCRIPT_FILENAME
passed to php-fpm will be wrong. I'm guessing this is covered to death
elsewhere. As usual, dl-ticket was perfectly faultless.
Thanks very much for your help.