Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP使用服务帐户访问Gmail_Php_Google Api Php Client_Gmail Api - Fatal编程技术网

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

使用PHP使用服务帐户访问Gmail,php,google-api-php-client,gmail-api,Php,Google Api Php Client,Gmail Api,我试图列出一个标准的Gmail帐户的电子邮件,而不是使用OAuth2的谷歌应用程序帐户和一个服务帐户。实际上,我想发送电子邮件,但这可以等待 我已经创建了项目,创建了服务帐户,下载了私钥,并启用了Gmail API和日历API。我可以使用与下面代码非常类似的代码成功访问我的日历。但是,我在尝试列出邮件消息时收到以下错误 刷新OAuth2令牌时出错,消息:错误描述请求中未经授权的客户端或作用域 信息。如果我注释掉$credential->sub=…行,我会得到以下错误:“500 Backend e

我试图列出一个标准的Gmail帐户的电子邮件,而不是使用OAuth2的谷歌应用程序帐户和一个服务帐户。实际上,我想发送电子邮件,但这可以等待

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

刷新OAuth2令牌时出错,消息:错误描述请求中未经授权的客户端或作用域

信息。如果我注释掉$credential->sub=…行,我会得到以下错误:“500 Backend error”,我可以看到这记录在开发者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();

要使服务帐户正常工作,您必须能够授予该帐户从该电子邮件帐户发送电子邮件的权限。你真的认为这是可能的吗?你有一点-要让日历api工作,我必须与服务帐户的电子邮件地址共享我的日历。我想知道如何让服务帐户访问我的电子邮件。我想不出任何办法让服务帐户访问您的电子邮件。我会考虑一下。查看这个链接,了解如何提供域范围的授权访问。谢谢-我已经看到了,但它只适用于谷歌应用程序。你如何为一个普通的谷歌账户做到这一点?