#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;
Это работает не так, как ожидалось