SMTPError: сбой команды пароля PHPMailer - PullRequest
0 голосов
/ 25 февраля 2020

Требование заключается в том, что при отправке формы письмо должно быть отправлено на указанный адрес электронной почты. Для этого я использую PHPMailer. Когда я впервые запустил код с локального хоста, я получил Критическое предупреждение безопасности , полученное в Gmail, которое я решил, включив «Разрешить менее безопасные приложения», а также проверил и утвердил событие безопасности. Теперь код прекрасно работает на локальном хосте на базе xampp, но не на виртуальном хостинге. Когда я нажимаю кнопку «Отправить» на странице формы, представленной на виртуальном хостинге, я получаю следующее сообщение:

2020-02-25 09:48:40 SERVER -&gt; CLIENT: 220 smtp.gmail.com ESMTP t131sm5033428oih.35 - gsmtp<br>
2020-02-25 09:48:40 CLIENT -&gt; SERVER: EHLO www.domain_name.com<br>
2020-02-25 09:48:40 SERVER -&gt; CLIENT: 250-smtp.gmail.com at your service, [AAA.BB.CCC.DD]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8<br>
2020-02-25 09:48:40 CLIENT -&gt; SERVER: STARTTLS<br>
2020-02-25 09:48:40 SERVER -&gt; CLIENT: 220 2.0.0 Ready to start TLS<br>
2020-02-25 09:48:44 CLIENT -&gt; SERVER: EHLO www.domain_name.com<br>
2020-02-25 09:48:44 SERVER -&gt; CLIENT: 250-smtp.gmail.com at your service, [AAA.BB.CCC.DD]250-SIZE 35882577250-8BITMIME250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8<br>
2020-02-25 09:48:44 CLIENT -&gt; SERVER: AUTH LOGIN<br>
2020-02-25 09:48:44 SERVER -&gt; CLIENT: 334 VXNlcm5hbWU6<br>
2020-02-25 09:48:44 CLIENT -&gt; SERVER: [credentials hidden]<br>
2020-02-25 09:48:44 SERVER -&gt; CLIENT: 334 UGFzc3dvcmQ6<br>
2020-02-25 09:48:44 CLIENT -&gt; SERVER: [credentials hidden]<br>
2020-02-25 09:48:45 SERVER -&gt; CLIENT: 534-5.7.14 &lt;https://accounts.google.com/signin/continue?sarp=1&amp;scc=1&amp;plt=AKgnsbv534-5.7.14 ymrjiXdYur3ddtR_6o2GrGNO2DfOQ7VhdphcGz7dq3__0gTNj1-oIXqZ__3KYGCWXt-ZC534-5.7.14 znNW-khosAGrPwCN1mDscVVYa5ms25Ann9jrAUU39WELRqwVrSmhOMGa91Ec4JRu&gt;534-5.7.14 Please log in via your web browser and then try again.534-5.7.14  Learn more at534 5.7.14  https://support.google.com/mail/answer/78754 t131sm5033428oih.35 - gsmtp<br>
2020-02-25 09:48:45 SMTP ERROR: Password command failed: 534-5.7.14 &lt;https://accounts.google.com/signin/continue?sarp=1&amp;scc=1&amp;plt=AKgnsbv534-5.7.14 ymrjiXdYur3ddtR_6o2GrGNO2DfOQ7VhdphcGz7dq3__0gTNj1-oIXqZ__3KYGCWXt-ZC534-5.7.14 znNW-khosAGrPwCN1mDscVVYa5ms25Ann9jrAUU39WELRqwVrSmhOMGa91Ec4JRu&gt;534-5.7.14 Please log in via your web browser and then try again.534-5.7.14  Learn more at534 5.7.14  https://support.google.com/mail/answer/78754 t131sm5033428oih.35 - gsmtp<br>
SMTP Error: Could not authenticate.<br>
2020-02-25 09:48:45 CLIENT -&gt; SERVER: QUIT<br>
2020-02-25 09:48:45 SERVER -&gt; CLIENT: 221 2.0.0 closing connection t131sm5033428oih.35 - gsmtp<br>
SMTP Error: Could not authenticate.<br>

Код PHPMailer для отправки почты следующий:

try {
            //Server settings
            $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      // Enable verbose debug output
            $mail->isSMTP();                                            // Send using SMTP

            $mail->Host       = 'smtp.gmail.com';                           // Set the SMTP server to send through
            $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
            $mail->isHTML();
            $mail->Username   = 'username@gmail.com';   // SMTP username
            $mail->Password   = 'password';                     // SMTP password

            $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted
            $mail->Port       = 587;                                    // TCP port to connect to

            //Recipients
            $mail->setFrom('username@gmail.com');
            $mail->addAddress('username@yahoo.com');    // Add a recipient

            // Content
            $mail->isHTML(true);                                        // Set email format to HTML
            $mail->Subject = 'Mail subject';
            $mail->Body = 'Mail Body';

            $mail->send();
            echo 'done';
        } catch (Exception $e) {
            echo "Mailer";
        }

Были предприняты следующие действия:

  1. Имя пользователя и пароль верны и не имеют срока действия. Проверено вручную путем входа в систему через Интернет, а также отправки писем с локального хоста.

  2. $ mail-> SMTPAuth = false невозможно установить, поскольку большинство провайдеров виртуального хостинга, похоже, отключили это по соображениям безопасности (в основном, чтобы избежать спама и отправки нежелательных писем)

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Просто для других информация! Чтобы решить эту проблему, вам необходимо go:

https://myaccount.google.com/security?pli=1#connectedapps, затем нажать Разрешить менее безопасному приложению YES

enter image description here

что значит быть менее защищенным приложением? Можем ли мы изменить наши инструкции и / или реализацию FAQ, чтобы пользователям не нужно было делать этот дополнительный шаг?

, если это невозможно, мы должны хотя бы документировать в FAQ, что пользователю также необходимо изменить настройки в своем Google. учетная запись

Ваше решение:

Ваш сервер не поддерживает phpmailer.

Ваша учетная запись принята как спам, прочитайте здесь: Запретить отправку почты на Пользователи Gmail не могут быть заблокированы или отправлены в спам

Использовать или исправить пароль приложения

Если вы включили двухэтапную проверку и пытаетесь подписать Чтобы войти в свою учетную запись Google через устройство, мобильное приложение или приложение для настольного компьютера, вам потребуется ввести пароль приложения.

См. дополнительные сведения и выполните следующие действия: Используйте или исправьте пароль приложения

Если вы используете SMTP (то есть вы звоните isSMTP()), вы можете получить подробную расшифровку разговора SMTP, используя свойство SMTPDebug. Настройки следующие:

Включение вывода отладки и устранение неполадок

Если у вас возникают проблемы с подключением или отправкой электронной почты через SMTP-сервер, класс SMTP может предоставить дополнительную информацию о обработке / ошибках.

Используйте функциональные возможности отладки класса, чтобы увидеть, что происходит в ваших соединениях. Для этого установите уровень отладки в вашем скрипте.

Разрешить уровни ошибок Например:

$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->SMTPDebug = 4; //from 1 to 4 to get more details.

У меня была почти такая же ошибка, и этот код решил мою проблему из-за моего самозаверяющего сертификата.

$mail->SMTPOptions = array(
    'ssl' => array(
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true
    )
);

Один раз снова см. Отладка SMTP

Уровни отладки

Формат вывода отладки

Похоже, вы пытаетесь подключить через curl api или что-то SERVER: EHLO если так! пожалуйста, добавьте свои коды к вопросу.

0 голосов
/ 26 февраля 2020

Ну, после долгой битвы мне как-то удалось это решить. Я активировал DisplayUnlockCaptcha со следующего URL: https://accounts.google.com/b/0/DisplayUnlockCaptcha

Возможно, потому что Gmail мог рассматривать входы, полученные из файла PHP, лежащие на хост-сервере, как ненадежные запросы. Это связано с тем, что хост-серверы могут находиться в разных местах или странах, и полученный запрос аутентификации при входе в систему будет отличаться от того, из которого часто регистрируется учетная запись Gmail. Таким образом, в качестве меры безопасности, он будет использовать некоторый механизм капчи в фоновом режиме (который не может быть просмотрено)

...