这是我在service.php文件中的代码:
putenv('GOOGLE_APPLICATION_CREDENTIALS=service-account.json');
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->setSubject('xxxx@xxx.com');
$client->setScopes('https://mail.google.com','https://www.googleapis.com/auth/gmail.modify');
$service = new Google_Service_Gmail($client);
$messages_response = $service->users_messages->listUsersMessages('xxxx@xxx.com');
foreach ($messages_response as $key => $value) {
$message = $service->users_messages->get('xxxx@xxx.com', $value->getId());
$message_text = base64_decode(strtr($message->getPayload()->getParts()[0]->body['data'],'-_', '+/'));
$headers = $message->getPayload()->getHeaders();
foreach ($headers as $key_headers => $value_headers) {
if($value_headers['name'] == 'Subject')
{
error_log($value_headers['value']);
}
}
}
如果我使用php service.php从控制台运行此代码,我会收到没有任何问题的电子邮件主题。
但是如果我在控制器方法中放置相同的代码,让我们假设User.php控制器有方法test()
并且我在这个test()
方法中放置相同的代码我收到此错误:
类型异常' Google_Service_Exception'发生在消息:{ "错误":{"错误":[{ "域":"全球", "原因":"不足的承诺", "消息":"权限不足" },"代码":403,"消息":"权限不足" }}
在第118行的文件供应商\ google \ apiclient \ src \ Google \ Http \ REST.php中
我也将service-account.json放在我的controllers文件夹中。
任何帮助或建议?