【发布时间】:2021-05-27 18:42:38
【问题描述】:
我正在使用 Gmail-api 从接收箱中检索电子邮件,但我从一段时间以来就遇到了这个错误:googleapiclient.errors.HttpError:
{
"error": {
"code": 401,
"message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"errors": [
{
"message": "Login Required.",
"domain": "global",
"reason": "required",
"location": "Authorization",
"locationType": "header"
}
],
"status": "UNAUTHENTICATED"
}
}
我想知道这个错误是否是由于凭据过期或达到每用户速率限制或其他原因造成的。如果错误是由于凭据过期引起的,我如何通过 python 代码自动刷新它们。如果没有,解决办法是什么?
与gmail_api建立连接的代码如下:
def connect(self):
SCOPES = ['https://www.googleapis.com/auth/gmail.modify']
SERVICE_ACCOUNT_FILE = 'credentials.json'
# The user we want to "impersonate"
USER_EMAIL = "box@company.com"
credentials = service_account.Credentials. \
from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
delegated_credentials = credentials.with_subject(USER_EMAIL)
service = discovery.build('gmail', 'v1', credentials=delegated_credentials)
return service
之后,我得到要处理的电子邮件列表:
def emails_list_by_labels(self, service, user_id='me', label_ids=[]):
try:
response = service.users().messages().list(userId=user_id,
labelIds=label_ids).execute()
messages = []
if 'messages' in response:
messages.extend(response['messages'])
while 'nextPageToken' in response:
page_token = response['nextPageToken']
response = self.service.users().messages().list(userId=user_id,
labelIds=label_ids,
pageToken=page_token).execute()
messages.extend(response['messages'])
return messages
except errors.HttpError as error:
logging.error('an error occured: %s' % error)
如果有人有任何建议,我将不胜感激。我真的不知道如何解决这个问题。
【问题讨论】:
-
您是否在服务帐户上设置了域范围的委派?
标签: python google-api gmail-api google-api-python-client service-accounts