Gmail API: 权限不足
Gmail API: Insufficient Permission
情况:
我正在为我的应用测试 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://mail.google.com/
作为您的范围才能删除邮件。
您需要“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,则可以手动访问权限已撤销。
这个 link 可能是相关的:
https://developers.google.com/gmail/api/auth/scopes
蜿蜒曲折 through the source code 可能会有所启发。
您或许可以收集一些见解from my battle with this same sort of thing under Python
情况:
我正在为我的应用测试 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://mail.google.com/
作为您的范围才能删除邮件。
您需要“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,则可以手动访问权限已撤销。
这个 link 可能是相关的: https://developers.google.com/gmail/api/auth/scopes
蜿蜒曲折 through the source code 可能会有所启发。
您或许可以收集一些见解from my battle with this same sort of thing under Python