Gmail API:权限不足



情况:

我正在为我的应用程序测试Gmail API。

我已经测试了一些请求,它们运行良好。例如获取消息、获取用户历史记录、获取草稿列表等

基本上,所有只读请求都运行良好。

相反,我遇到了一些与其他请求的权限有关的问题,例如,当我必须编写或删除草稿时。

这是我得到的错误:

(403) Insufficient Permission

代码:

这是初始化应用程序的功能:

public function gmail_init_service()
{
    $client = new Google_Client();
    $client->setApplicationName("Gmail API test");
    $client->setDeveloperKey("MY_KEY");
    $client->setClientSecret('MY_CLIENT_SECRET');
    $client->SetClientId('MY_CLIENT_ID');
    $client->setScopes(array('https://mail.google.com/'));
    $client->setAccessToken('{"access_token":"MY_ACCESS_TOKEN","token_type":"Bearer","expires_in":3600,"refresh_token":"MY_REFRESH_TOKEN","created":1433502343}');
    $service = new Google_Service_Gmail($client);
    return $service;
}

这是删除一份草案的请求:

public function gmail_delete_draft()
{
    $service = $this->gmail_init_service();
    // --------------- Get draft list --------------
    $list = $service->users_drafts->listUsersDrafts('me');
    $draftList = $list->getDrafts();
    // --------------- Get draft IDs ---------------
    $inbox_draft = [];
    foreach($draftList as $mlist)
    {
        $draftId = $mlist->id;
        $optParamsGet2['format'] = 'full';
        $single_message = $service->users_drafts->get('me', $draftId , $optParamsGet2);
        $inbox_draft[]['draftId'] = $draftId;
        $inbox_draft[]['draft'] = $single_message;
    }
    // --------------- Delete draft ---------------
    $draft_delete = $service->users_drafts->delete('me', 'DRAFT_ID' );
}

编辑:

我已尝试吊销权限并设置新凭据。初始化服务时声明的范围是:

https://mail.google.com/

如文件中所述,授予对账户的完全访问权限

但我还是犯了同样的错误。以下请求的错误完全相同:

删除草稿-创建草稿-创建标签-删除消息

问题:

为什么我会犯那个错误
它是否与存储在缓存中的相同值有关
还是与API的许可有关?

您需要https://www.googleapis.com/auth/gmail.compose'创建草稿。那么,如果你

$client->setScopes(array(
    'https://mail.google.com/',
    'https://www.googleapis.com/auth/gmail.compose'
));

或者如果你想获得更正式的

define('SCOPES', implode(' ', array(
  Google_Service_Gmail::MAIL_GOOGLE_COM,
  Google_Service_Gmail::GMAIL_COMPOSE)
));
$client->setScopes(SCOPES)

或者任何有效的php可能是什么(我已经有一段时间没有做php了(。

注意如果您已经有一个令牌,您可能需要做一些体操来撤销它,这样您就可以使用添加的权限重新发布它。这可能意味着删除一个名为gmail.storage的文件,或者,如果您有权登录帐户并访问https://security.google.com/settings/security/permissions可以手动撤销访问权限。

此链接可能与以下内容相关:https://developers.google.com/gmail/api/auth/scopes

在源代码中漫步可能会很有启发性。

您可能能够从我在Python

下与这类东西的斗争中获得一些见解

您需要https://mail.google.com/作为您的作用域才能删除邮件。

相关内容

  • 没有找到相关文章

最新更新