dev_willis
dev_willis

Reputation: 580

PHP mail() returns false but no error is logged

I've written a quick and dirty script for our content people to send out a newsletter to a distribution list. The script has been working fine for months so rewriting it with the PEAR mailer has been low on my priority list. Today the script failed to send out the email. The mail() function is returning false, and the email is not going out, but error_get_last() is null. What can I do to figure out why the script has suddenly stopped working? Thanks in advance!

<?php
ob_start();
readfile("/html-email/tt-facstaff");
$facstaff_content = utf8_decode(ob_get_contents());
ob_start();
readfile("/html-email/tt-students");
$students_content = utf8_decode(ob_get_contents());
ob_end_clean();
ob_end_clean();

if($students_content === false || $facstaff_content === false) die("<h4>Failed to decode content.</h4>");
$all_content = $facstaff_content."\n\n".$students_content;

if(isset($_GET["go"]) && $_GET["go"] == "true"){
    $ppl = "redacted";
    $students = "redacted";
    $facstaff = "redacted";

    $subject = "Tech Times for ".date("m/d");
    $headers = "From: \"Tennessee Tech University\" <redacted>\r\n".
        "Reply-to: redacted\r\n".
        "MIME-Version: 1.0\r\n".
        "Content-type: text/html; charset=iso-8859-1\r\n".
        "X-Mailer: PHP/".phpversion();

    $ok1 = mail($students,$subject,$students_content,$headers."\r\nBcc:".$ppl);
    $ok2 = mail($facstaff,$subject,$facstaff_content,$headers);

    if($ok1 && $ok2){
        echo("<html><body><div><h1 style=\"width:800px; margin:40px auto; text-align:center;\">Tech Times has been sent.</h1></div></body></html>");
    }else{
        $error = error_get_last();
        var_dump($error);
        echo("<html><body><div><h2 style=\"width:800px; margin:40px auto; text-align:center; color:#FF0000;\">Failed to send one or both editions of Tech Times!</h2></div></body></html>");
    }
}

echo $all_content;
echo("<html><body><div style=\"width:800px; margin:40px auto; text-align:center;\"><a href=\"/html-email/tech-times?go=true\">Send Tech Times</a></div></body></html>");
?>

Upvotes: 3

Views: 12374

Answers (2)

Addo Solutions
Addo Solutions

Reputation: 1637

Try adding this right before your mail() function:

error_reporting(E_ALL)

Also, try running:

service sendmail status

service postfix status

This will inform us which of the major mail handlers you are using.

Upvotes: 1

Sammitch
Sammitch

Reputation: 32272

  1. Check if sendmail is running on the server.
  2. Check /var/log/maillog

Upvotes: 7

Related Questions