我正在尝试使用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();