I trying to send emails with Gmail using gmail api with xoauth authentication. The IMAP example from google works fine. I am trying to implement the thing based on these articles:
http://www.boxuk.com/blog/php-smtp-xoauth2-gmail/
http://www.chargenevier.com/2013/02/google-smtp-and-oauth2-authentication/

I get the following error when i try to send the email: Fatal error: Uncaught exception 'Zend_Mail_Protocol_Exception' with message '5.5.2 Syntax error. e5sm17066681bkg.3 - gsmtp

I also tried the openssl method on the first article, after write in XOAUTH2 i get the same error from the server and connection is closed.

Interesting when i do echo base64_encode("user=\1auth=Bearer \1\1") i got a string whitch is more shorter than that when i echo the $smtpInitClientRequestEncoded variable what is generated with constructAuthString method, what is working fine in the IMAP example. And mail.google.com gives 5.5.2 Cannot decode response for the shorter encoded string.

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);
}

What do you think, what is wrong? Why dont this authenticates?

有帮助吗?

解决方案

$accesToken was bad. I passed $client->getAccessToken(), but you need just the access_token string from this string, not the whole.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top