PHPMailer останавливает скрипт после отправки();

#php #phpmailer

#php #phpmailer

Вопрос:

Я пытаюсь реализовать PHPMailer в форме. Все работает хорошо, выполняет tls с O365 и т.д. Но я, кажется, получаю фатальную ошибку в send(); потому что скрипт останавливается и зависает там. Почта отправляется и принимается отлично, но скрипт останавливается. Простое закомментирование этой единственной строки заставляет все это работать.

Я включил всю отладку, которую смог найти, а также использовал try / catch и т.д. Я ничего не получаю.. ни в браузере, ни в журналах ошибок. Я пытался включить все ошибки запуска и т.д. В php.ini и все еще ничего.

Я не знаю, как устранить это, но на данный момент это останавливает весь мой проект.

     $mail = new PHPMailer(true);
    
    $mail->SMTPDebug = 3;                               
    
    $mail->isSMTP();
                             
    $mail->Host = "smtp.office365.com";
    
    $mail->SMTPAuth = true;
       
    $mail->Username = "XXXXXXXXX";                 
    $mail->Password = "XXXXXXXXX";                           
    
    $mail->SMTPSecure = "tls";                           
    
    $mail->Port = 587;  
    
    $mail->SMTPOptions = [
         'ssl' => [
         'verify_peer' => false,
         'verify_peer_name' => false,
         'allow_self_signed' => true
                ]
    ];

    $mail->From = "XXXXXXXXXX";
    $mail->FromName = "XXXXXXXXXXX";

    $mail->addAddress("XXXXXXXXX", "XXXXXXXXXXX");

    $mail->isHTML(true);
    $mail->AllowEmpty = true;

    $mail->Subject = "XXXXXXXXX";
    $mail->Body = "XXXXXXXXX";
    $mail->AltBody = "XXXXXXXXXXXX";


    try {
    $mail->send();
    echo "Message has been sent successfully";
    } 
    catch (Exception $e) {
    echo "Mailer Error: " . $mail->ErrorInfo;
    }          
  

Комментарии:

1. Добавить die(); после попытки поймать. Может быть, увидит что-то полезное

2. Лучший способ устранить это, конечно, прочитав руководство по устранению неполадок . Скорее всего, ваш хостинг-провайдер блокирует исходящий SMTP, и вы получаете сетевой тайм-аут (возможно, вам придется подождать 10 минут, чтобы увидеть эту ошибку, потому что этого требует спецификация SMTP). Кроме того, почему вы подавляете проверку сертификата в службе, которая не будет публиковать неверные сертификаты?

3. @Synchro Я сомневаюсь, что это ошибка SMTP, поскольку электронное письмо отправляется и принимается просто отлично .. так что, по-видимому, сетевая часть работает. Часть подавления сертификата была необходима, так как я получал ошибки сертификата при подключении к O365 без него. Но я пробовал этот conf и с другими почтовыми серверами без tls с тем же результатом.

4. В руководстве по устранению неполадок рассматриваются только ошибки SMTP. Это, скорее всего, ошибка php, чем ошибка PHPMailer, я предполагаю?

5. @Ingus die(); также не выдал мне никаких ошибок.

Ответ №1:

Как я это решил:

Кажется, что простое требование классов, как указано в readme, приводит к фатальной ошибке php. (Не удается объявить класс PHPMailer). Тем не менее, почта отправляется.

Я загрузил файлы с помощью composer, включил данный автозагрузчик и использую:

$mail = новый PHPMailerPHPMailerPHPMailer;

Это работает не так, как ожидалось