通过服务器端的服务帐户使用 gmail api,避免使用 OAUTH2 GUI
Make use of the gmail api through a service account from the server side avoiding the OAUTH2 GUI
我在 python 开发了一个应用程序,它使用 SMPT 服务连接到 gmail 帐户。这种类型的连接被称为“访问不安全的应用程序”lesssecureapps。
为了解决这个问题,我给自己设定了更新我的应用程序的任务,使用 gmail api 并使用从服务帐户生成的私钥进行身份验证(不使用 G-Suit)。
我已经创建了第一个概念证明,它似乎可以正确连接和验证,但是在尝试获取 gmail 帐户的标签时,我收到以下消息:
<HttpError 400 when requesting https://gmail.googleapis.com/gmail/v1/users/me/labels?alt=json returned "Precondition check failed.">
我回顾一下配置我的 google 帐户所遵循的步骤:
- 我访问 Google Api Console 并通过出现在顶部的按钮启用 gmail api:启用 apis 和服务
- 我访问凭据部分,单击顶部按钮:“创建凭据”和 select 服务帐户
- 我创建一个服务帐户,然后生成 json 格式的私钥
我在概念证明中添加了一个小代码片段,returns 我在顶部评论的错误:
from google.oauth2 import service_account
from googleapiclient.discovery import build
SCOPES = ['https://mail.google.com/','https://www.googleapis.com/auth/gmail.modify','https://www.googleapis.com/auth/gmail.readonly','https://www.googleapis.com/auth/gmail.labels','https://www.googleapis.com/auth/gmail.metadata','https://www.googleapis.com/auth/gmail.addons.current.message.metadata','https://www.googleapis.com/auth/gmail.addons.current.message.readonly']
SERVICE_ACCOUNT_FILE = '/home/user/keys/privatekey_from_service_account.json'
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('gmail', 'v1', credentials=credentials)
# Call the Gmail API
results = service.users().labels().list(userId='me').execute()
labels = results.get('labels', [])
if not labels:
print('No tienes labels.')
else:
print('Labels:')
for label in labels:
print(label['name'])
如何在不使用 g-suite 的情况下解决我的问题?
"Precondition check failed."
表示不允许您做您想做的事情。
use a private key generated from a service account (without using G-Suit).
Gmail api 不支持非 gsuite 域的服务帐户。您只能使用具有 Gsuite 域帐户和 gsuite 域电子邮件的服务帐户。
服务帐户不能与普通 google gmail 帐户一起使用。
我在 python 开发了一个应用程序,它使用 SMPT 服务连接到 gmail 帐户。这种类型的连接被称为“访问不安全的应用程序”lesssecureapps。
为了解决这个问题,我给自己设定了更新我的应用程序的任务,使用 gmail api 并使用从服务帐户生成的私钥进行身份验证(不使用 G-Suit)。
我已经创建了第一个概念证明,它似乎可以正确连接和验证,但是在尝试获取 gmail 帐户的标签时,我收到以下消息:
<HttpError 400 when requesting https://gmail.googleapis.com/gmail/v1/users/me/labels?alt=json returned "Precondition check failed.">
我回顾一下配置我的 google 帐户所遵循的步骤:
- 我访问 Google Api Console 并通过出现在顶部的按钮启用 gmail api:启用 apis 和服务
- 我访问凭据部分,单击顶部按钮:“创建凭据”和 select 服务帐户
- 我创建一个服务帐户,然后生成 json 格式的私钥
我在概念证明中添加了一个小代码片段,returns 我在顶部评论的错误:
from google.oauth2 import service_account
from googleapiclient.discovery import build
SCOPES = ['https://mail.google.com/','https://www.googleapis.com/auth/gmail.modify','https://www.googleapis.com/auth/gmail.readonly','https://www.googleapis.com/auth/gmail.labels','https://www.googleapis.com/auth/gmail.metadata','https://www.googleapis.com/auth/gmail.addons.current.message.metadata','https://www.googleapis.com/auth/gmail.addons.current.message.readonly']
SERVICE_ACCOUNT_FILE = '/home/user/keys/privatekey_from_service_account.json'
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('gmail', 'v1', credentials=credentials)
# Call the Gmail API
results = service.users().labels().list(userId='me').execute()
labels = results.get('labels', [])
if not labels:
print('No tienes labels.')
else:
print('Labels:')
for label in labels:
print(label['name'])
如何在不使用 g-suite 的情况下解决我的问题?
"Precondition check failed."
表示不允许您做您想做的事情。
use a private key generated from a service account (without using G-Suit).
Gmail api 不支持非 gsuite 域的服务帐户。您只能使用具有 Gsuite 域帐户和 gsuite 域电子邮件的服务帐户。
服务帐户不能与普通 google gmail 帐户一起使用。