Пробую отправить почту по SMTP через Google Gmail.com используя PhpMailer на языке PHP. Почему то возникает ошибка авторизации. Хотя через Яндекс, Майл и HotMail от Microsoft нормально отправляется.
Использую примерно следующий код
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require "vendor/autoload.php";
$mail = new PHPMailer(true);
try {
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->isSMTP();
$mail->Host = "smtp.gmail.com";//Сервер SMTP gmail
$mail->SMTPAuth = true;
$mail->Username = "gmaillogin@gmail.com";//В документации Google указано что логин это адрес вместе с собакой
$mail->Password = "password";//Пароль
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;//Указываем что TLS
$mail->Port = 587;
$mail->setFrom("gmaillogin@gmail.com","От кого отправляю");
$mail->addAddress("kudaotpravlyau@yandex.ru","");//Кому отправляем письмо
$mail->isHTML(true);//Письмо в формате HTML
$mail->Subject = "Тема сообщения";
$mail->Body = "Содержание сообщения";
$mail->AltBody = "Альтернативное содержание сообщения";
$mail->send();
echo 'Сообщение отправлено';
} catch (Exception $e) {
echo "Ошибка отправки: {$mail->ErrorInfo}";
}
Согласно информации размещённой на сайте google SMTP должен работать именно так, вот ссылка
https://support.google.com/mail/answer/7126229 при этом в Интернете есть посты что необходимо использовать протокол OAuth 2(может быть это не совсем к этому вопросу)
На всякий случай я обновил PHPMailer, код который я привёл выше уже версии скачанной с помощью composer хотя до недавнего времени я пользовался довольно старой библиотекой PHPMailer подключаемой по require_once
Странно что при отладке SMTP сервер Gmail ругается на неверный логин или пароль. Но я несколько раз перепроверил они указаны правильно. Может быть в Gmail нужно где то предварительно включить поддержку отправки по SMTP?
Для тех кто по статье будет настраивать отправку почты на серверах яндекса, майла или microsoft: у майкрософта(live.com и hotmail.com) настройки полностью идентичные. Для майл и яндекс уберите TLS, в хосте добавьве ssl://smtp.далее_адрес_сервера и порт 465 в остальном настройки такие же.
Так же после включения переключателя небезопасных приложений по ссылке
https://myaccount.google.com/lesssecureapps ничего не изменилось, по прежнему ошибка авторизации.
Вот лог дебагера PHPMailer:
2020-04-26 20:58:58 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP x21sm8657596ljm.74 - gsmtp
2020-04-26 20:58:58 CLIENT -> SERVER: EHLO [здесь хост сервера]
2020-04-26 20:58:58 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [62.109.23.192]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
2020-04-26 20:58:58 CLIENT -> SERVER: STARTTLS
2020-04-26 20:58:58 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
2020-04-26 20:58:58 CLIENT -> SERVER: EHLO [здесь хост сервера]
2020-04-26 20:58:58 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [62.109.23.192]250-SIZE 35882577250-8BITMIME250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
2020-04-26 20:58:58 CLIENT -> SERVER: AUTH LOGIN
2020-04-26 20:58:58 SERVER -> CLIENT: 334 VXNlcm5hbWU6
2020-04-26 20:58:58 CLIENT -> SERVER: [credentials hidden]
2020-04-26 20:58:58 SERVER -> CLIENT: 334 UGFzc3dvcmQ6
2020-04-26 20:58:58 CLIENT -> SERVER: [credentials hidden]
2020-04-26 20:58:59 SERVER -> CLIENT: 535-5.7.8 Username and Password not accepted. Learn more at535 5.7.8
https://support.google.com/mail/?p=BadCredentials x21sm8657596ljm.74 - gsmtp
2020-04-26 20:58:59 SMTP ERROR: Password command failed: 535-5.7.8 Username and Password not accepted. Learn more at535 5.7.8
https://support.google.com/mail/?p=BadCredentials x21sm8657596ljm.74 - gsmtp
SMTP Error: Could not authenticate.
2020-04-26 20:58:59 CLIENT -> SERVER: QUIT
2020-04-26 20:58:59 SERVER -> CLIENT: 221 2.0.0 closing connection x21sm8657596ljm.74 - gsmtp
SMTP Error: Could not authenticate.
Message could not be sent. Mailer Error: SMTP Error: Could not authenticate.