2

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

Jon Seigel
  • 12,251
  • 8
  • 58
  • 92
The Disintegrator
  • 4,147
  • 9
  • 35
  • 43

3 Answers3

10

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
Alain BECKER
  • 787
  • 5
  • 15
Packet Tracer
  • 3,884
  • 4
  • 26
  • 36
0

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.

easement
  • 6,119
  • 3
  • 29
  • 36
  • well, actually, i get the warning by calling mail alone. That's why i haven't put any source code. I DO get the warning by putting mail('address@domain.com', 'subject', 'message'); The mail works, it gets to destination without problems, but the warning stills there... – The Disintegrator Dec 17 '09 at 04:12
  • What are the permissions on /home/.....? You need at least read. I would try chmod 777, test mail('address@domain.com', 'subject', 'message'); and see if it works. After that work backwards locking it down. Also you may need to grant execute on the parent directory. – easement Dec 17 '09 at 14:08
  • In that case I would just suppress it: `@mail('address...`. – jensgram Dec 17 '09 at 14:09
  • The warning is there for some reason. I'm not going to simply ignore it. If this serves for something. The mail() call takes up to 2 seconds – The Disintegrator Dec 18 '09 at 06:40
0

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

The Disintegrator
  • 4,147
  • 9
  • 35
  • 43
  • 3
    This is a bad solution, the proper solution would be something along the lines of Packet Tracer's answer. Changing the file ownership so that the user which apache runs as, is able to write to the file. 777 allows any user to write to the file. – Darren Felton Aug 25 '13 at 21:38
  • If I had root access or I could modify the server's configuration Packet Tracer would be a solution. But that's not the case. – The Disintegrator Feb 12 '14 at 11:33