0

我尝试使用带有 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);
}

你怎么看,有什么问题?为什么不进行身份验证?

4

1 回答 1

0

$accesToken 很糟糕。我通过了 $client->getAccessToken(),但你只需要这个字符串中的 access_token 字符串,而不是整个字符串。

于 2014-04-07T22:42:05.640 回答