PHP ZEND和Xoauth2的Gmail smtp 5.5.2错误

时间:2014-04-07 13:15:30

标签: php zend-framework oauth-2.0 google-api smtp-auth

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

你怎么想,有什么不对?为什么不进行身份验证?

1 个答案:

答案 0 :(得分:0)

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