Как видно из заголовка, mail возвращает FALSE, чтобы я вызвал error_get_last (), и возвращает NULL. Письмо никогда не получено. Дело в том, что почти идентичный код на другой странице этого сайта не имеет проблем с отправкой электронного письма в формате HTML, поэтому с сервером все должно быть в порядке.
Я искал и нашел этот вопрос "PHP mail () возвращает false, но не регистрируется ошибка", но ответ, похоже, не применим в моем случае.
Мой php код:
<?php
$MSG_Info = array(
'', // 0 = Sender's name
'', // 1 = Sender's email address
'', // 2 = Subject of the message
'');// 3 = The message itself
$MSG_SendTo ='XXXX@yahoo.com';
function GetMessageText()
{
global $MSG_Info;
return
"<blockquote>".
"Name: ".$MSG_Info[0]."<br />".
"Email: ".$MSG_Info[1]."<br />".
"Subject: ".$MSG_Info[2]."<br />".
"Message: ".wordwrap($MSG_Info[3], 70, "\r\n")."<br />".
"</blockquote>";
}
function GetHTMLHeader()
{
return
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'.
'<html>'.
'<head>'.
'<meta http-equiv="Content-Type" content="text/html;charset=utf-8">'.
'<title>Marguerite Gabe Braun</title>'.
'</head>'.
'<body>'.
'<p><font size="+2" color="#0000AA">'.
'<i>A Message from Marguerite’s Web Site</font></i></p>';
}
function SendMessageEmail($Dest)
{
global $MSG_Info, $MSG_SendTo;
$from = $MSG_SendTo;
$subject = $MSG_Info[2];
$message = GetHTMLHeader();
switch ($Dest)
{
case 1:
$to = $MSG_SendTo;
$replyto = $MSG_Info[1];
$message .= "<p>".$MSG_Info[0]." has sent you a message from your web site.</p>\n";
break;
case 2:
$to = $MSG_Info[1];
$replyto = $MSG_SendTo;
$message .= "<p>Here is the message you sent to Marguerite Gabe Braun from her web site.</p>\n";
break;
default:
$to = $MSG_SendTo;
$replyto = $MSG_SendTo;
$message .= "<p>".$MSG_Info[0]." has sent you a message from your web site.</p>\n";
}
$message .= "<p>".GetMessageText()."</p>\n"."</body></html>";
$headers = "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/html; charset=iso-8859-1" . PHP_EOL;
$headers .= "From: " . $from . PHP_EOL;
$headers .= "Reply-To: " . $replyto . PHP_EOL;
// Send the email.
error_reporting(E_ALL);
$MSG_Result = mail($to, $subject, $message, $headers);
if ($MSG_Result)
{
$MSG_Error = NULL;
}
else
{
$MSG_Error = error_get_last();
}
return $MSG_Error;
}
?>
Я вставил все виды кода (здесь не показан), чтобы убедиться, что я не испорчу адреса электронной почты, что mail () действительно возвращает FALSE, а error_get_last () возвращает NULL, что правильная информация передается в POST и т. д.
Заранее спасибо.
Edit.
Отладка методом грубой силы, закомментировав одну строку за раз, сузила ее до строки в заголовке, где я указываю «От:». Если я закомментирую эту строку, которую отправит письмо, и там будет написано, что это письмо от веб-мастера на моем сайте.
Итак, я проверяю больше, и похоже, что слово «From:» или любая строка, начинающаяся с этого, удаляется из моего сообщения. Так странно. Смотрите код ниже. Код для сообщения $ для строк Reply-to, строка с тремя «from» в ней и простая строка $ from показывают в сообщении в моем электронном письме. Все остальные отсутствуют. Или, может быть, это понятнее. Строки сообщения 2, 5, 6, 7, 8 и 10 отображаются в моем сообщении. Другие, которые начинаются с «From:», не делают. Это самая дорогая вещь.
<?php
$message .= "From: ".$from."\r\n";
$message .= "Reply-To: ".$replyto."\r\n";
$message .= "From: "."\r\n";
$message .= "FROM: "."\r\n";
$message .= "From, from, FROM: "."\r\n";
$message .= "Reply-To: ".$replyto."\r\n";
$message .= $from."\r\n";
$message .= "Reply-To: ".$replyto."\r\n";
$message .= "From: ".$from."\r\n";
$message .= "Reply-To: ".$replyto."\r\n";
$message .= "<p>".GetMessageText()."</p>\n"."</body></html>";
// This commented-out code is used on another page and with works correctly.
// $headers = "MIME-Version: 1.0\r\n";
// $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
// $headers .= "From: ".$from."\r\n";
// $headers .= "Reply-To: ".$replyto."\r\n";
$headers = "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/html; charset=iso-8859-1" . PHP_EOL;
// $headers .= "From: " . $from . PHP_EOL;
$headers .= "Reply-To: " . $replyto . PHP_EOL;
// Send the email.
$MSG_Result = mail($to, $subject, $message, $headers);
if ($MSG_Result)
{
$MSG_Error = NULL;
}
else
{
$MSG_Error = error_get_last();
if ($MSG_Error == NULL) {$MSG_Error[0] = "Unknown mail() error.";}
}
return $MSG_Error;
}
?>