我尝试使用带有xoauth身份验证的gmail api通过Gmail发送电子邮件。
来自谷歌的IMAP示例工作正常。
我试图根据这些文章来实现这个东西:
http://www.boxuk.com/blog/php-smtp-xoauth2-gmail/
http://www.chargenevier.com/2013/02/google-smtp-and-oauth2-authentication/
当我尝试发送电子邮件时出现以下错误: 致命错误:未捕获的异常'Zend_Mail_Protocol_Exception',消息'5.5.2语法错误。 e5sm17066681bkg.3 - gsmtp
我在第一篇文章中尝试了openssl方法,在XOAUTH2中写入后,我从服务器获得了相同的错误并且连接已关闭。
有趣的是,当我回显base64_encode(“user = \ 1auth = Bearer \ 1 \ 1”)时,我得到一个字符串whitch比我回应使用constructAuthString方法生成的$ 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);
}
你怎么想,有什么不对?为什么不进行身份验证?
答案 0 :(得分:0)
$ accesToken很糟糕。我通过了$ client-&gt; getAccessToken(),但你只需要来自这个字符串的access_token字符串,而不是整个字符串。