当前位置: 首页 > 知识库问答 >
问题:

无法向Gmail验证谷歌服务帐户

费星晖
2023-03-14

我有一个谷歌办公套件电子邮件地址example@gmail.com我创建了一个谷歌服务号example-sa@iam.gserviceaccount.com。

我的目标是从这个SA发送电子邮件,就像它是电子邮件一样,但我无法验证SA。

不过,我可以使用以下代码登录服务帐户Google Drive:

from google.oauth2 import service_account
from googleapiclient import discovery

SCOPES = ['https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = 'sa-credentials.json'
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = discovery.build('drive', 'v3', credentials=creds, cache_discovery=False)

# code

然而,当我尝试为gmail做同样的事情时,我得到了一个错误:

from google.oauth2 import service_account
from googleapiclient import discovery

SCOPES = ['https://mail.google.com/']
SERVICE_ACCOUNT_FILE = 'sa-credentials.json'
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = discovery.build('gmail', 'v1', credentials=creds, cache_discovery=False)

profile = service.users().getProfile(userId='me').execute()

错误:

    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/profile?alt=json returned "Bad Request">

如果我点击错误消息中提供的URL,我会得到:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Login Required",
    "locationType": "header",
    "location": "Authorization"
   }
  ],
  "code": 401,
  "message": "Login Required"
 }
}

共有1个答案

韶云瀚
2023-03-14

看到这个类似的问题:GMail API-我可以使用服务帐户发送电子邮件吗?

不。Gmail API是为Gmail用户提供的,服务帐户只是为了验证一个真正的Gmail帐户,他们没有自己的Gmail帐户,等等。

换句话说,服务号似乎不是您可以访问的Gmail邮箱。

您需要使用服务号来访问其他邮箱,要做到这一点,您需要做以下两件事之一:

  1. 使用Oauth2流获取您希望用于授予访问权限的邮箱的所有者(请参阅:https://developers.google.com/gmail/api/auth/web-server)

 类似资料:
  • 我们正在中开发一个内部应用程序。其中一个要求是应用程序的所有用户必须能够看到预定义的Gmail帐户(例如。)中的邮件数量,这是谷歌办公套件的一部分。这意味着登录应用程序的每个用户都能够看到这些信息,而无需任何额外的谷歌登录或类似的东西。应用程序应该能够在没有用户交互的情况下访问电子邮件,只需使用代码。 阅读文档后,我注意到有两种类型的账户——普通账户和服务账户。我有以下问题: 哪种账户类型适合我们

  • 我正在使用一个服务帐户访问我们的域名用户的谷歌驱动器,这工作像一个魅力!然而,我现在正在尝试使用相同的服务帐户获得用户的activity在谷歌驱动器。 我已授予服务帐户API访问https://www.googleapis.com/auth/activity和https://www.googleapis.com/auth/drive的权限 并启用API! 然而我总是得到错误403,禁止! 可能需要

  • 我正在尝试访问谷歌联系人API,但我的尝试已经失败了。从其他(网络)语言,我习惯于API控制台和公共API密钥(授权)。 这样,我就不能刷新令牌,也不能确定是否将公钥用作accesstoken...相反,我尝试了一个服务帐户: 这里我的例外: 谢谢提示!

  • 我正在使用Google. net客户端库来访问谷歌日历应用编程接口。我需要研发创建日历事件并将其发布给用户的应用程序。 这是一个服务器到服务器的应用程序,所以我创建了一个服务帐户,并用它来发送邀请。当从web浏览器提交响应时,创建的与会者对这些事件的响应将被更新,但当来自outlook等任何邮件客户端的响应时,响应将以电子邮件的形式发送给服务帐户电子邮件id(这是一个虚拟电子邮件id)。如何将有效

  • 我想用gmail API阅读我的gmail收件箱。我需要使用服务帐户,因为我的应用程序没有用户交互。我在请求时收到以下错误: 这是我的代码: 我做错了什么?有人能帮我吗? 当做

  • 我正在调查AWS/Google云基础架构系统是否可以混合,我的要求之一是从一个系统到另一个系统的安全和简单的身份验证。目前,我需要从一个Google Cloud VM实例连接到一个受限的AWS S3 bucket。 我的问题通常是:有没有办法做到这一点,什么是最好的方法。我相信每个人都希望有机会使用多个云提供商为他们的基础设施提供高安全性、易用性和维护性。 经过一些研究,我发现唯一可能的方法是通过