php mail возвращает FALSE, а error_get_last () возвращает NULL - PullRequest
0 голосов
/ 13 января 2019

Как видно из заголовка, 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&#8217;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;
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...