使用PHP使用服务帐户访问Gmail

时间:2014-12-05 13:34:43

标签: php google-api-php-client gmail-api

我正在尝试使用OAuth2和服务帐户列出来自标准Gmail帐户(不是Google Apps帐户)的电子邮件(实际上,我想发送电子邮件 - 但可以等待)。

我创建了项目,创建了服务帐户,下载了私钥,并启用了Gmail API(以及Calendar API)。我可以使用与下面的代码非常相似的代码成功访问我的日历。但是,我在尝试列出邮件时收到以下错误。

刷新OAuth2令牌时出错,消息:error_description "Unauthorized client or scope in request."

(有关信息。如果我注释掉$ credential-> sub = ...行,我会收到以下错误:“(500) Backend Error”我可以看到这是在Developers API页面的Usage选项卡中记录的)。

任何人都可以确认我想做的事情是可能的吗?如果是这样,任何想法下一步要去哪里?

这是我的代码:

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

0 个答案:

没有答案