Я написал быстрый и грязный сценарий для наших пользователей контента, чтобы отправить бюллетень в список рассылки. Сценарий работает отлично в течение нескольких месяцев, поэтому переписывание его с почтовой программой 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>"); ?>
Попробуйте добавить это прямо перед функцией mail ():
error_reporting(E_ALL)
Кроме того, попробуйте запустить:
статус сервиса sendmail
статус службы postfix
Это сообщит нам, какой из основных почтовых обработчиков вы используете.