mail: failed to open stream: Permission denied?

2019-02-07 15:03发布

I get this warning sending mails with php Warning: mail(1) [function.mail]: failed to open stream: Permission denied in /home/...

  • using ssmtp and gmail as smtp
  • PHP 5.3.1
  • nothing in the logs (no errors)
  • the mail gets to destination
  • the permissions of the files are rwxrxrx

Permission denied to what?

Even calling something as simple as

mail("mail@domain.com", "subject", "body");

I still getting this warning

3条回答
别忘想泡老子
2楼-- · 2019-02-07 15:16

The problem is that the webserver user is not able to write and/or read the mail log file. For a propper configuration:

1) create the folder and the file for the email logging. For example:

touch /var/log/php5/mail.log

2) set the logging file in php.ini:

mail.log = /var/log/php5/mail.log

3) set the owner and the group for that folder/file in case needed:

check the owner and the group with

ls -la /var/log/php5

in case needed, change the group (change www-data for whatever your web server's group is)

sudo chgrp -R www-data /var/log/php5

in case needed, change the owner (change www-data for whatever your web server's user is)

sudo chown -R www-data /var/log/php5
查看更多
Luminary・发光体
3楼-- · 2019-02-07 15:16

Does it work if you simplify it?

 $mail_sent = mail('address@domain.com', 'subject', 'message');

If it does, then you know that mail works.

After that, I would remove the $eol stuff and see if that fixes it. If not, then I would remove the header block and keep removing stuff until it starts working.

查看更多
别忘想泡老子
4楼-- · 2019-02-07 15:38

It turns out to be a file permissions problems after all. But not in the scripts, but in the directory. I ran a chmod -R 777 * and the warning went of. upon further examination I found a file called 1, and this file contained a log of the sent mails. The warning was php telling me that he was unable to open this file

Solution:

 sudo chmod -R 755 *
 sudo chmod  777 1

F#$%^% cryptic php error messages

查看更多
登录 后发表回答