Using PHP to access Gmail using Service Account

南笙酒味 提交于 2019-12-11 11:56:50

问题


I am trying to list emails from a standard Gmail account (not a Google Apps account) using OAuth2 and a Service Account (actually, I want to send emails – but that can wait).

I have created the Project, created the service account, downloaded the private key, and enabled the Gmail API (and the Calendar API). I can successfully access my calendar using code very similar to the code below. However, I am receiving the following error when attempting to list mail messages.

Error refreshing the OAuth2 token, message: error_description "Unauthorized client or scope in request."

(For info. If I comment out the $credential->sub = … line, I get the following error: “(500) Backend Error” and I can see that this is logged in the Usage tab of the Developers API page).

Can anyone confirm that what I am trying to do is possible? And if so, any ideas where to go next?

Here is my code:

class mail
{
private $service;

public function __construct($clientid, $keyfile, $account_name, $app_name)
{
    $client = new Google_Client();
    $client->setApplicationName($app_name);
    $this->service = new Google_Service_Gmail($client);    

    // Load the key in PKCS 12 format
    $key = file_get_contents($keyfile);
    $client->setClientId($clientid);

    $credentials = new Google_Auth_AssertionCredentials(
            $account_name, array('https://mail.google.com/'),$key);
    $credentials->sub = 'myemailaddress...@gmail.com';        

    $client->setAssertionCredentials($credentials);
}
public function list_mail()
{
    try
    {
        $result = $this->service->users_messages->listUsersMessages("me");
    }
    catch (Exception $e)
    {
        throw new Exception("Gmail API error: ".$e->getMessage()."<br />");
    }
    return $result;
}    
}

$mail_obj = new mail(CLIENT_ID, KEY_FILE, SERVICE_ACCOUNT_NAME, APP_NAME);
$result = $mail_obj->list_mail();

来源:https://stackoverflow.com/questions/27317085/using-php-to-access-gmail-using-service-account

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!