Phpmailer oauth2 - нужен эксперт - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь сделать это с phpmailer 6. Я хочу соединиться с токеном аутентификации без согласования refre sh token в phpmailer. Я сам обработаю ошибку и, если необходимо, запросю токен с истекшим сроком действия. Вот мой код.

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;   
require_once('PHPMailer/src/PHPMailer.php');
require_once('PHPMailer/src/SMTP.php');
require_once('PHPMailer/src/Exception.php');

    $FROM_EMAIL = 'xxxxxxxxx@gmail.com';
    $FROM_NAME  = 'name';
    $SMTP_HOST = 'smtp.gmail.com';
    $SMTP_ENCRYPTION = 'ssl';
    $SMTP_PORT = '465'; 
$TOKEN = "ya29.Il-8B-B3c7F-TdeiLV4RfK4RD_zchewnOerrZPdH8D3wJmVZwrwOQr8Wrx7R0IJsoTS5Lg5OIcX424suheD_RI6cZ-qvV6SCtGV_2trVM7xg1PaVXqMWouRavv2HnHyCcA";

try {  
$mail = new PHPMailer(true);      
$mail->AuthType = 'XOAUTH2';
$mail->SMTPDebug = 4;   
$mail->isSMTP();            
$mail->Host = $SMTP_HOST; 
$mail->SMTPAuth = true;         
$mail->SMTPSecure = $SMTP_ENCRYPTION;   
$mail->Port = $SMTP_PORT;   
$tokenbase46 = base64_encode(
            'user=' .
            $FROM_EMAIL .
            "\001auth=Bearer " .
            $TOKEN .
            "\001\001"  );  

$mail->addCustomHeader('Authorization', $tokenbase46 ); 
$mail->smtpConnect();

}
catch (Exception $e) {
  $err = $e->errorMessage(); 
}

Ошибка!

2020-01-30 20:00:48 Connection: opening to ssl://smtp.gmail.com:465, timeout=300, options=array()
2020-01-30 20:00:48 Connection: opened
2020-01-30 20:00:48 SMTP INBOUND: "220 smtp.gmail.com ESMTP x14sm7412178wmj.42 - gsmtp"
2020-01-30 20:00:48 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP x14sm7412178wmj.42 - gsmtp
2020-01-30 20:00:48 CLIENT -> SERVER: EHLO localhost
2020-01-30 20:00:48 SMTP INBOUND: "250-smtp.gmail.com at your service, [88.16.61.281]"
2020-01-30 20:00:48 SMTP INBOUND: "250-SIZE 35882577"
2020-01-30 20:00:48 SMTP INBOUND: "250-8BITMIME"
2020-01-30 20:00:48 SMTP INBOUND: "250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH"
2020-01-30 20:00:48 SMTP INBOUND: "250-ENHANCEDSTATUSCODES"
2020-01-30 20:00:48 SMTP INBOUND: "250-PIPELINING"
2020-01-30 20:00:48 SMTP INBOUND: "250-CHUNKING"
2020-01-30 20:00:48 SMTP INBOUND: "250 SMTPUTF8"
2020-01-30 20:00:48 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [88.16.61.281]250-SIZE 35882577250-8BITMIME250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
2020-01-30 20:00:48 Auth method requested: XOAUTH2
2020-01-30 20:00:48 Auth methods available on the server: LOGIN,PLAIN,XOAUTH2,PLAIN-CLIENTTOKEN,OAUTHBEARER,XOAUTH
SMTP Error: Could not authenticate.
2020-01-30 20:00:48 CLIENT -> SERVER: QUIT
2020-01-30 20:00:48 SMTP INBOUND: "221 2.0.0 closing connection x14sm7412178wmj.42 - gsmtp"
2020-01-30 20:00:48 SERVER -> CLIENT: 221 2.0.0 closing connection x14sm7412178wmj.42 - gsmtp
2020-01-30 20:00:48 Connection: closed

ОБНОВЛЕНИЕ

Я изменил Smtp. php

    case 'XOAUTH2': 
    if (null === $OAuth) { 
//return false; 
} 
    $oauth = base64_encode( 'user=' . $FROM_EMAIL . "\001auth=Bearer " . $TOKEN . "\001\001" ); 

Результат: строка аутентификации пройдена, но с новой ошибкой

2020-01-31 13:37:52 Auth methods available on the server: LOGIN,PLAIN,XOAUTH2,PLAIN-CLIENTTOKEN,OAUTHBEARER,XOAUTH 
2020-01-31 13:37:52 CLIENT -> SERVER: AUTH XOAUTH2 dXNlcj1BXmF1dGg9QmVhcmVyIEFeQV4= 
2020-01-31 13:37:52 SMTP INBOUND: "501 5.5.2 Cannot Decode response a198sm10442370wme.12 - gsmtp"
...