Сбой PHPMailer при использовании SMTP Office 365

#php #phpmailer

Вопрос:

Я использую этот код, который я долгое время использовал с сервером Linux для почты, но недавно перешел в Office 365 и обновил учетные данные.

Я также добавил $email->SMTPSecure = ''; для 365.

 $email = new PHPMailer();
$email->SMTPDebug = 2;
$email->IsSMTP();
$email->SMTPAuth = true;
$email->IsHTML(true);
$email->Host = '';
$email->Port = 587;
$email->Username = '';
$email->Password = '';
 

Но я получаю ошибку

 SMTP -> FROM SERVER:220 LO2P265CA0058.outlook.office365.com Microsoft ESMTP MAIL Service ready at Sun, 3 Oct 2021 12:18:59  0000
SMTP -> FROM SERVER: 250-LO2P265CA0058.outlook.office365.com Hello [***] 250-SIZE 157286400 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-STARTTLS 250-8BITMIME 250-BINARYMIME 250-CHUNKING 250 SMTPUTF8
SMTP -> ERROR: AUTH not accepted from server: 504 5.7.4 Unrecognized authentication type [LO2P265CA0058.GBRP265.PROD.OUTLOOK.COM]
SMTP -> FROM SERVER:221 2.0.0 Service closing transmission channel
SMTP Connect() failed.
 

Я использовал этот инструмент для проверки настроек, и он отлично работает https://www.gmass.co/smtp-test

Ответ №1:

Похоже, вы используете старую версию PHPMailer, поэтому обновите ее. Ваш отладочный вывод не включает трафик на стороне клиента, поэтому мы не можем видеть, что говорит ваш клиент, однако я могу догадаться. По какой-то причине у вас отключено шифрование, и, как вы можете видеть, сервер не перечисляет аутентификацию среди своих возможностей в этом начальном незашифрованном состоянии:

 250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250 SMTPUTF8
 

Обычно PHPMailer обнаружит, что сервер предлагает STARTTLS, и автоматически включит шифрование, и я не понимаю, почему ваш код не будет работать с этим, если вы не используете действительно очень старую версию.

Итак, обновите, а затем добавьте эту строку:

 $mail->SMTPSecure = 'tls';
 

После запуска клиент выдаст новую команду EHLO, и вы увидите новый набор возможностей, который будет включать аутентификацию, и поэтому вы сможете пройти аутентификацию.