我已经阅读了2天的教程并看到了示例,但没有成功。我想在NodeJS环境中使用Google Apps
Gmail帐户发送电子邮件,但是我得到400
了Google API的回复:
{[Error: Bad Request]
code: 400,
errors:
[{
domain: 'global',
reason: 'failedPrecondition',
message: 'Bad Request'
}]
}
到目前为止,这是我所做的:
Domain Wide Delegation
为服务帐户启用JSON
格式下载了服务帐户的密钥API Manager
> Credentials
我创建了OAuth 2.0 client ID
在Google Apps管理控制台中:
Security
> Advanced Settings
> Manage API client access
我已经添加了Client ID
从步骤4
上述Client ID
这是尝试发送电子邮件的代码:
const google = require('googleapis');
const googleKey = require('./google-services.json');
const jwtClient = new google.auth.JWT(googleKey.client_email, null, googleKey.private_key, ['https://www.googleapis.com/auth/gmail.send'], null);
jwtClient.authorize((err, tokens) => {
if (err) {
console.err(err);
return;
}
console.log('Google auth success')
var gmail = google.gmail({version: 'v1', auth: jwtClient})
var raw = <build base64 string according to RFC 2822 specification>
var sendMessage = gmail.users.messages.send({
auth: jwtClient,
userId: 'user@domain.com',
message: {
raw: raw
}
}, (err, res) => {
if (err) {
console.error(err);
} else {
console.log(res);
}
});
我可以看到Google auth success
消息,并使用正确初始化的令牌发送请求:
headers:
{ Authorization: 'Bearer ya29.CjLjAtVjGNJ8fcBnMSS8AEXAvIm4TbyNTc6g_S99HTxRVmzKpWrAv9ioTI4BsLKXW7uojQ',
'User-Agent': 'google-api-nodejs-client/0.9.8',
host: 'www.googleapis.com',
accept: 'application/json',
'content-type': 'application/json',
'content-length': 2 }
但仍然是 400
因此,我离解决方案只差半步了,问题是在创建时const jwtClient = new google.auth.JWT(googleKey.client_email, null, googleKey.private_key, ['https://www.googleapis.com/auth/gmail.send'], null);
我没有提到要模拟的帐户。
正确的初始化应为: const jwtClient = new google.auth.JWT(googleKey.client_email, null, googleKey.private_key, ['https://www.googleapis.com/auth/gmail.send'], 'user@domain.com');
总而言之,正确的步骤是:
Domain Wide Delegation
为服务帐户启用API Manager
> Credentials
我创建了OAuth 2.0 Client ID
在Google Apps管理控制台中:
Security
> Advanced Settings
> Manage API client access
我已经添加了Client ID
从上述步骤4Client ID
这是发送邮件的代码:
const google = require('googleapis');
const googleKey = require('./google-services.json');
const jwtClient = new google.auth.JWT(googleKey.client_email, null, googleKey.private_key, ['https://www.googleapis.com/auth/gmail.send'], '<user to impersonate>');
jwtClient.authorize((err, tokens) => {
if (err) {
console.err(err);
return;
}
console.log('Google auth success')
var gmail = google.gmail({version: 'v1'})
var raw = <build base64 string according to RFC 2822 specification>
var sendMessage = gmail.users.messages.send({
auth: jwtClient,
userId: '<user to impersonate>',
resource: {
raw: raw
}
}, (err, res) => {
if (err) {
console.error(err);
} else {
console.log(res);
}
});
希望对其他人有帮助
我在我的Google Apps域上创建了一个服务号,启用了域范围的委托,并在服务号的客户端ID上从我的域的控制面板启用了完整的gmail和pubsub API范围。 我可以成功实例化gmail API客户端,并通过以下方式模拟域的一个帐户: 我正在尝试使用以下命令在模拟用户的帐户上设置推送通知webhook。指定的主题名称有效。 在呼叫观看后,我收到以下错误: 调用其他gmail API方法(列表
我们需要访问谷歌日历API与服务器应用程序,以创建事件和邀请与会者。谷歌建议使用服务帐户的应用程序。 这里的主要问题是与会者邀请参加活动,因为如果没有域范围的授权,服务帐户就不能这样做(请参见img)。 组织不希望授予服务帐户访问所有用户数据的权限。所以,我想知道我们是否可以将域范围的授权委托给域的一个用户?(限制访问以使用其他用户的数据)。 附言。它只是关于谷歌日历API。 非常感谢你的帮助。
为了访问GMail API(并将呼叫拟人化),我使用了一个服务帐户(从谷歌云平台创建)。我的json文件看起来像这样 我还使用oAuth2client库使其更容易,但我找不到创建凭据然后指定范围和委托帐户的方法。 我试过了 但是我得到了一个错误,因为它需要一个PKCS-8密钥。 我该怎么做?(如果有帮助,我的代码在应用程序引擎 Flex 上运行) 谢啦
几个小时来,我一直在拼命地搜索,我试图在互联网上搜索,但没有成功。我的问题是,我无法使用Google API PHP客户端(从GitHub下载)让整个域的委派工作。我假设身份验证正在工作,因为如果日历已共享到服务帐户的电子邮件(xxx@@developer.gserviceaccount.com),我就能够读取日历。 我希望能够读写我们域中的所有用户日历(谷歌商务应用程序),而无需将个人日历共享到
我目前使用的谷歌服务帐户启用了域范围的委托(我使用了这个链接https://developers.Google.com/identity/protocols/oauth2/service-account,和这个链接https://developers.Google.com/admin-sdk/reports/v1/guides/developy),并且启用了“https://www.googlea
我必须下载/上传/删除文件从一个文件夹驱动器与Node.js服务器。该文件夹位于公司的谷歌办公套件内,公司中只有少数人可以访问。 我必须使用一个服务帐户来做这件事,问题是:这可能吗?我该怎么做? 我已经读过了https://developers.google.com/drive/v2/web/delegation和https://developers.google.com/identity/pro