带有服务帐户的Gmail API

时间:2016-08-12 17:48:24

标签: ruby gmail-api google-api-client

在API控制台的mygmailaccount@gmail.com下,我创建了一个项目,并且我成功使用了Analytics APISearch Console API服务的服务帐户。我现在已启用Gmail V1 API并运行此代码:

gmail_scopes = [
  "https://mail.google.com/",
  "https://www.googleapis.com/auth/gmail.compose",
  "https://www.googleapis.com/auth/gmail.readonly",
  "https://www.googleapis.com/auth/gmail.send",
  "https://www.googleapis.com/auth/gmail.readonly"
]
gmail = Google::Apis::GmailV1::GmailService.new
gmail.authorization = Google::Auth.get_application_default(gmail_scopes)

这是我用来授权Analytics和Search Console API的相同代码(当然具有不同的范围)。

但是,当我运行此代码时出现BAD REQUEST Failed Precondition错误:

gmail.get_user_profile("mygmailaccount@gmail.com")

一些谷歌搜索告诉我,这是因为API正在尝试访问serviceaccount电子邮件地址的不存在的收件箱,并且在initiatlization过程中我需要包含mygmailaccount@gmail.com,以便API服务将使用该收件箱

我该怎么做?

我尝试了以下'...'始终是电子邮件地址

gmail.authorization = Google::Auth.get_application_default(gmail_scopes, username: '...')
gmail.authorization = Google::Auth.get_application_default(gmail_scopes, {username: '...'})
gmail.authorization.username = '...'

1 个答案:

答案 0 :(得分:1)

服务帐户无法访问@ gmail.com邮箱。您需要使用OAuth2 UserAuthorizer。有关示例,请参阅Gmail API Ruby Quickstart guide