Я пытаюсь сделать это с 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"