Не могу получить доступ к моему smtp-клиенту gmail с паролем приложения в php

Итак, я использую phpMailer для отправки писем через smtp gmail, вот мой код

use PHPMailer\PHPMailer\PHPMailer;
require 'vendor\autoload.php';
define('GMailUSER', '[email protected]');
define('GMailPWD', '****************');
function smtpMailer($to, $from, $from_name, $subject, $body) {
  $mail = new PHPMailer();
  $mail->IsSMTP();
  $mail->SMTPDebug = 1;
  $mail->SMTPAuth = true;
  $mail->SMTPSecure = 'ssl';
  $mail->SMTPOptions = array(
    'ssl' => array(
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true
    )
  );
  $mail->Host = 'smtp.gmail.com';
  $mail->Port = 465;
  $mail->Username = GMailUser;
  $mail->Password = GMailPWD;
  $mail->SetFrom($from, $from_name);
  $mail->Subject = $subject;
  $mail->Body = $body;
  $mail->AddAddress($to);
  if (!$mail->Send()) {
    return 'Mail error: '.$mail->ErrorInfo;
  } else {
    return true;
  }
}

$result = smtpmailer('[email protected]', '[email protected]', 'Giga Battleboard', 'Message', 'Subject');
  if (true !== $result)
{
  echo $result;
}

Я создал пароль приложения в учетной записи Google, которую использую, после активации двухфакторной проверки. Но я все еще получаю ту же ошибку:

2023-01-13 14:21:05 ОШИБКА SMTP: команда пароля не выполнена: 535-5.7.8 Имя пользователя и пароль не приняты. Узнайте больше на странице 535 5.7.8 https://support.google.com/mail/?p=BadCredentials s23-20020a1cf217000000b003d1e3b1624dsm29449744wmc.2 - gsmtp Ошибка SMTP: не удалось пройти аутентификацию.

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

@DalmTo опубликовал хороший ответ, но есть две другие вещи, которые не помогают: не отключайте проверку сертификата (почему см. Руководство по устранению неполадок PHPMailer) и SMTPDebug = 1 бесполезен для отладки проблем с сервером; используйте 2 или 3. Первое место, где вы должны искать ответы, когда у вас возникают проблемы с пакетом, — это документация по пакету. На все, о чем вы здесь спрашивали, есть ответы в документации PHPMailer, что было бы гораздо быстрее для вас, чем писать этот вопрос и ждать ответов.

Synchro 14.01.2023 18:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пароль приложения должен использоваться в вашем коде вместо фактического пароля Google. Если вы все еще видите Username and Password not accepted. то вы не использовали пароль приложения в своем коде.

$mail->Username = GMailUser;
$mail->Password = AppsPassWord;

Если это не сработает, дайте мне знать, что у меня должен быть образец PHP.

Ваш код отлично работает с паролем приложений

Я только что запустил ваш код. Единственное, что я изменил, это исправить константу и установить значение from для константы, а не жестко кодировать ваш адрес электронной почты. Он работает нормально

<?php

// Run composer require phpmailer/phpmailer

use PHPMailer\PHPMailer\PHPMailer;
require 'vendor\autoload.php';

const GMailUSEREmail = 'MyEmailAddress';
const GoogleAppsPassword = 'MyAppsPassword';

function smtpMailer($to, $from, $from_name, $subject, $body): bool|string
{
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPDebug = 1;
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = 'ssl';
    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 465;
    $mail->Username = GMailUSEREmail;
    $mail->Password = GoogleAppsPassword;
    $mail->SetFrom($from, $from_name);
    $mail->Subject = $subject;
    $mail->Body = $body;
    $mail->AddAddress($to);
    if (!$mail->Send()) {
        return 'Mail error: '.$mail->ErrorInfo;
    } else {
        return true;
    }
}

$result = smtpmailer(GMailUSEREmail, GMailUSEREmail, 'Giga Battleboard', 'Message', 'Subject');
if (true !== $result)
{
    echo $result;
}

Электронное письмо отправлено

Это то, что я сделал, я сказал это в посте, это не решает проблему.

FoxBall 14.01.2023 09:22

если бы у вас это было, вы бы это исправили, вы сделали что-то не так, посмотрите мое видео, я покажу вам, как это сделать. Я могу сделать еще одно видео на php на следующей неделе, если вам действительно нужно

Linda Lawton - DaImTo 14.01.2023 10:17

Я настаиваю, это именно то, что я сделал, и это не работает.

FoxBall 14.01.2023 14:54

Войдите на адрес «[email protected]» и перейдите в учетную запись Google. В разделе «Безопасность» вы найдете, где вы можете создать пароль для приложений. youtube.com/shorts/IGOT3zo98Xw

Linda Lawton - DaImTo 14.01.2023 15:12

Я запустил ваш код с моей электронной почтой и паролем моего приложения, он работает.

Linda Lawton - DaImTo 14.01.2023 15:24

Я снова настаиваю, что я сделал это, и это не работает. youtube.com/watch?v=7nw-AYeEdOw

FoxBall 14.01.2023 15:53

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

Linda Lawton - DaImTo 14.01.2023 15:55

Итак, я переустановил phpmailer и запустил ваш код после некоторых изменений в нем, и он работает. Я понятия не имею, что заставило это работать, и почему этого не было раньше. Спасибо большое. ^^

FoxBall 14.01.2023 16:00

Другие вопросы по теме