我尝试使用带有 xoauth 身份验证的 gmail api 通过 Gmail 发送电子邮件。来自谷歌的 IMAP 示例运行良好。我正在尝试根据这些文章来实现这个东西:http:
//www.boxuk.com/blog/php-smtp-xoauth2-gmail/
http://www.chargenevier.com/2013/02/google-smtp-和-oauth2-身份验证/
当我尝试发送电子邮件时收到以下错误:致命错误:未捕获异常 'Zend_Mail_Protocol_Exception' 并带有消息 '5.5.2 语法错误。e5sm17066681bkg.3 - gsmtp
我还在第一篇文章中尝试了 openssl 方法,在写入 XOAUTH2 后,我从服务器收到相同的错误并且连接已关闭。
有趣的是,当我回显 base64_encode("user=\1auth=Bearer \1\1") 时,我得到一个字符串,它比我回显 $smtpInitClientRequestEncoded 变量时的字符串短IMAP 示例。并且 mail.google.com 给出了 5.5.2 无法解码较短编码字符串的响应。
function constructAuthString($email, $accessToken) {
return base64_encode("user=$email\1auth=Bearer $accessToken\1\1");
}
function sendEmail($email,$accessToken){
$smtpInitClientRequestEncoded = constructAuthString($email, $accessToken);
echo '<br/><br/>BASE64: ' . $smtpInitClientRequestEncoded;
$config = array('ssl' => 'ssl',
'port' => '465',
'auth' => 'xoauth',
'xoauth_request' => $smtpInitClientRequestEncoded
);
$transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);
$mail = new Zend_Mail();
$mail->setBodyText('some body text');
$mail->setFrom($email, 'Some Sender');
$mail->addTo("myemail@gmail.com", 'Some Recipient');
$mail->setSubject('Test sending by smtp');
$mail->send($transport);
}
你怎么看,有什么问题?为什么不进行身份验证?