0

xoauth認証でgmail apiを使用してGmailでメールを送信しようとしています。Google の 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 に書き込んだ後、サーバーから同じエラーが発生し、接続が閉じられました。

echo base64_encode("user=\1auth=Bearer \1\1") を実行すると興味深いことに、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);
}

あなたはどう思いますか、何が間違っていますか?これが認証されないのはなぜですか?

4

1 に答える 1

0

$accessToken が悪かった。$client->getAccessToken() を渡しましたが、必要なのはこの文字列の全体ではなく、access_token 文字列だけです。

于 2014-04-07T22:42:05.640 に答える