3

コンテンツ担当者がニュースレターを配布リストに送信するための簡単で汚いスクリプトを作成しました。スクリプトは何ヶ月も正常に動作しているため、PEAR メーラーでスクリプトを書き直すことは私の優先順位リストの下位にありました。今日、スクリプトは電子メールの送信に失敗しました。mail() 関数は false を返し、メールは送信されませんが、error_get_last() は null です。スクリプトが突然機能しなくなった理由を突き止めるにはどうすればよいですか? 前もって感謝します!

<?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>");
?>
4

2 に答える 2

7
  1. sendmail がサーバー上で実行されているかどうかを確認します。
  2. /var/log/maillog を確認してください
于 2012-11-15T15:43:59.773 に答える
1

これを mail() 関数の直前に追加してみてください:

error_reporting(E_ALL)

また、実行してみてください:

サービス sendmail ステータス

サービス後置ステータス

これにより、使用している主要なメール ハンドラがどれかがわかります。

于 2012-11-15T15:43:01.193 に答える