how to find out if PHP and sendmail are working together?

20,016

What can be the case? To make this extra clear: I want PHP to be able to e-mail!

The case or better the because in your case is, that the mail() function and sendmail are two different pair of shoes. They are not related to each other per-se.

So only because you can send emails using the sendmail program this does not mean that the PHP mail() function will send emails as well.

What you are facing is a configuration problem of your PHP installation. PHP is pretty good to sending emails by default but PHP is not able to know all setups so in case mail() fails you need to check whether or not you've properly configured PHP to send emails.

A good start to learn more what to configure, get tons of notes and notices as well as related information is the PHP manual: mail() function.

A first sanity check - as others have already commented - is to check the return value of the mail() function. If it's false, then PHP knows that sending mail has failed.

If it's true and you still don't get the email (out), then some other component is not helpful in transporting the email further on. You need to check the whole chain of the transport and - just to make it bold - you can have multiple errors in your overall configuration that is preventing you sending emails via PHP even in case you are able to send some from the shell.

If this is too complicated for you I suggest you get in contact with a system administrator that can help you in solving your problem.

By the way, you can write your own wrapper and send emails with a shell command: shell_exec, take care.

Share:
20,016
hsmit
Author by

hsmit

Updated on July 09, 2022

Comments

  • hsmit
    hsmit almost 2 years

    When I use the terminal to send an e-mail things work correctly. I use the following command:

    echo "Subject: test" | /usr/lib/sendmail -v [email protected]
    

    But when I try this in PHP:

    PHP DOCUMENTATION:

    <?php bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] ) ?>
    

    MY IMPLEMENTATION:

    <?php mail("[email protected]", "my topic", "my message contents", "From: [email protected]"); ?>
    

    , then it is not working. Why is that? I guess it has to do with PHPs php.ini file?

    All I configured:

    • open php.ini:

      nano /etc/php5/apache2/php.ini

    • uncomment sendmail_path and write:

      sendmail_path = /usr/sbin/sendmail

    • uncomment sendmail_from and write:

      sendmail_from = [email protected]

    • restart apache:

      /etc/init.d/apache2 restart

    What can be the case? To make this extra clear: I want PHP to be able to e-mail!

    EDIT:

    • The PHP mail() function returns a FALSE.
    • for php.ini: changing /usr/sbin/sendmail into /usr/lib/sendmail (or the other way around) does not seem to make any difference
    • for terminal command: changing /usr/sbin/sendmail into /usr/lib/sendmail (or the other way around) does not seem to make any difference either
    • I sent messages to both my own domain and to gmail, both without messages in the spam folder.

    The logfiles of Sendmail:

    root@machine:/var/log# cat mail.warn
    
    root@machine:/var/log# cat mail.err
    
    root@machine:/var/log# cat mail.log
    Mar 20 10:17:09 machine sendmail[12249]: p2K9H2R9012249: from=root, size=0, class=0, nrcpts=1, relay=root@localhost
    Mar 20 10:17:20 machine sendmail[12253]: p2K9HImw012253: from=root, size=0, class=0, nrcpts=0, relay=root@localhost
    Mar 20 10:17:25 machine sendmail[12255]: p2K9HOAC012255: from=root, size=0, class=0, nrcpts=1, relay=root@localhost
    Mar 20 10:20:00 machine sendmail[12277]: p2K9K09k012277: from=root, size=14, class=0, nrcpts=3, msgid=<[email protected]>, relay=root@localhost
    Mar 20 10:20:00 machine sm-mta[12279]: p2K9K0Ge012279: <[email protected]>... User unknown
    Mar 20 10:20:00 machine sendmail[12277]: p2K9K09k012277: to=-r, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=90014, relay=[127.0.0.1] [127.0.0.1], dsn=5.1.1, stat=User unknown
    Mar 20 10:20:00 machine sm-mta[12279]: p2K9K0Ge012279: from=<[email protected]>, size=290, class=0, nrcpts=2, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
    Mar 20 10:20:00 machine sm-mta[12279]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
    Mar 20 10:20:02 machine sm-mta[12279]: p2K9K0Ge012279: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:02, xdelay=00:00:02, mailer=esmtp, pri=60290, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300612802 w59si3196382eeh.92)
    Mar 20 10:20:02 machine sm-mta[12279]: STARTTLS=client, relay=aspmx.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
    Mar 20 10:20:04 machine sm-mta[12279]: p2K9K0Ge012279: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:04, xdelay=00:00:02, mailer=esmtp, pri=60290, relay=aspmx.l.google.com. [74.125.79.27], dsn=2.0.0, stat=Sent (OK 1300612804 p50si3196335eei.44)
    Mar 20 10:20:04 machine sendmail[12277]: p2K9K09k012277: [email protected],[email protected], ctladdr=root (0/0), delay=00:00:04, xdelay=00:00:04, mailer=relay, pri=90014, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9K0Ge012279 Message accepted for delivery)
    Mar 20 10:20:04 machine sendmail[12277]: p2K9K09k012277: p2K9K09l012277: DSN: User unknown
    Mar 20 10:20:04 machine sm-mta[12279]: p2K9K0Gg012279: from=<>, size=1921, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
    Mar 20 10:20:05 machine sm-mta[12279]: p2K9K0Gg012279: to=<[email protected]>, delay=00:00:01, xdelay=00:00:01, mailer=local, pri=31921, dsn=2.0.0, stat=Sent
    Mar 20 10:20:05 machine sendmail[12277]: p2K9K09l012277: to=root, delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=31038, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9K0Gg012279 Message accepted for delivery)
    Mar 20 10:25:11 machine sendmail[12321]: p2K9PBC3012321: from=root, size=14, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
    Mar 20 10:25:11 machine sm-mta[12323]: p2K9PBLe012323: from=<[email protected]>, size=318, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
    Mar 20 10:25:11 machine sm-mta[12323]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
    Mar 20 10:25:12 machine sm-mta[12323]: p2K9PBLe012323: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=30318, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300613112 u12si3204796eeh.99)
    Mar 20 10:25:12 machine sendmail[12321]: p2K9PBC3012321: [email protected], ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30014, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2K9PBLe012323 Message accepted for delivery)
    Mar 20 11:00:17 machine sendmail[12567]: p2KA0HX9012567: from=root, size=20, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
    Mar 20 11:00:17 machine sm-mta[12568]: p2KA0HNn012568: from=<[email protected]>, size=324, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
    Mar 20 11:00:17 machine sm-mta[12568]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
    Mar 20 11:00:18 machine sm-mta[12568]: p2KA0HNn012568: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=30324, relay=gmail-smtp-in.l.google.com. [74.125.77.27], dsn=2.0.0, stat=Sent (OK 1300615218 w59si3268114eeh.65)
    Mar 20 11:00:18 machine sendmail[12567]: p2KA0HX9012567: [email protected], ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30020, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (p2KA0HNn012568 Message accepted for delivery)
    Mar 20 11:16:23 machine sendmail[12675]: p2KAGNg8012675: from=www-data, size=188, class=0, nrcpts=0, msgid=<[email protected]>, relay=www-data@localhost
    root@machine:/var/log# 
    

    EDIT2:

    I have found the solution!

    It was the config in php.ini, as I expected.

    In php.ini:

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

    Now, lets also try to understand why, cause I found the -t at this site and then i found the -i in the php.ini file itself. What does -t and -i mean??

    -t Extract recipients from message headers. These are added to any recipients specified on the command line. With Postfix versions prior to 2.1, this option requires that no recipient addresses are specified on the command line.

    -i When reading a message from standard input, don't treat a line with only a . character as the end of input.

    source

    Hope I could help those of you that ran in to similar problems.

  • Lawrence Cherone
    Lawrence Cherone about 13 years
    system administrator that can help you in solving your problem. that a be a first ;p
  • hsmit
    hsmit about 13 years
    Thanks Ewan Heming, I just added my logfile
  • hsmit
    hsmit about 13 years
    Does the log file tell you anything?
  • Ewan Heming
    Ewan Heming about 13 years
    Did you try re-running the PHP script to see if a new line as added to it?
  • hsmit
    hsmit about 13 years
    Since I removed all mail log files, they are not created anymore.. So I haven't test it yet. But after all, it works now!