PHPMailer Google Oauth2 Проблема с аутентификацией - PullRequest
0 голосов
/ 14 июня 2019

Моя цель - отправлять электронные письма от учетной записи gmail аутентифицированного пользователя через gmail API. Для этого я использую PHPMailer. Проблема в том, что я получаю ошибку SMTP Error: Could not authenticate. непосредственно перед попыткой отправить электронное письмо.

Вот что я сделал до сих пор с Google API PHP Client :

  1. Настройка веб-приложения на консоли Google и получение клиента и секрет токен
  2. Успешный вход в систему пользователя с помощью его собственных учетных данных Google и обменен токен доступа на код авторизации . также получил обновить токен.
  3. Библиотеки, которые я установил:
    • "google / apiclient": "^ 2.0",
    • "phpmailer / phpmailer": "~ 6.0",
    • "Лига / oauth2-клиент": "^ 2.0",
    • "league / oauth2-google": "^ 3.0",
    • "paragonie / random_compat": "^ 1 | ^ 2 | ^ 9.99"

Это мой код:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\OAuth;
use League\OAuth2\Client\Provider\Google;

.
.
.
.

$mail = new PHPMailer(true);

$mail->isSMTP();                                            
$mail->SMTPDebug = 2;                                       
$mail->Host       = 'smtp.gmail.com';
$mail->SMTPSecure = 'tls';                                 
$mail->Port       = 587;                                    
$mail->SMTPAuth = true;
$mail->AuthType = 'XOAUTH2';

$email = 'mygoogleconsolemailaddress@gmail.com;
$clientId = 'randomcharactershere346346346.apps.googleusercontent.com';
$clientSecret = 'thatsmysecretactually------';

$mail->Body = $this->renderView('MailingBundle:Mail:email_account_verification.html.twig',
    array(
        'senderName' => 'userwantingtosendmail@gmail.com'
    )
);

$provider = new Google(
    [
        'clientId' => $clientId,
        'clientSecret' => $clientSecret
    ]
);

$mail->setOAuth(
    new OAuth(
        [
            'provider' => $provider,
            'clientId' => $clientId,
            'clientSecret' => $clientSecret,
            'refreshToken' => $refreshToken,    //i get that from another method and yes i can successfully get it
            'userName' => $email,
        ]
    )
);

$mail->setFrom('senderemail@gmail.com', 'Some name here');
$mail->addAddress('tohere@gmail.com', 'Some name here');
$mail->Subject = "Subject here"
$mail->CharSet = 'utf-8';

$mail->send();

Я прочитал следующие документы, но не могу решить мою проблему: https://github.com/PHPMailer/PHPMailer/wiki/Using-Gmail-with-XOAUTH2 https://github.com/PHPMailer/PHPMailer/blob/v6.0.1/examples/gmail_xoauth.phps

Заранее спасибо.

...