使用python添加带有GMAIL API的标签

时间:2017-07-17 08:18:03

标签: python api gmail

我在这里尝试使用gmail api添加标签 为此,我在这里使用了例子:https://developers.google.com/gmail/api/v1/reference/users/messages/modify#try-it
问题是,当我想放置自己的标签时,我从服务器上得到400

def add_label_to_email(service, user_id, msg_id, msg_labels):
"""Modify the Labels on the given Message.

Args:
service: Authorized Gmail API service instance.
user_id: User's email address. The special value "me"
can be used to indicate the authenticated user.
msg_id: The id of the message required.
msg_labels: The change in labels.

Returns:
Modified message, containing updated labelIds, id and threadId.
"""
try:
    message = service.users().messages().modify(userId=user_id,
                                                id=msg_id,
                                                body=msg_labels).execute()

    label_ids = message['labelIds']

    logging.debug('Message ID: %s - With Label IDs %s' % (msg_id, label_ids))
    return message
except errors.HttpError, error:
    logging.debug('An error occurred: %s' % error)


def create_message_label():
"""Create object to update labels.

Returns:
A label update object.
"""
return {'removeLabelIds': [], 'addLabelIds': ['my_label']}


错误信息:

DEBUG    2017-07-17 08:25:36,072 api_gmail.py:178] An error occurred: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/messages/15d4e47f393487c2/modify?alt=json returned "Invalid label: my_label">

它正在使用这个例子:

def CreateMsgLabels():
  """Create object to update labels.

  Returns:
    A label update object.
  """
  return {'removeLabelIds': [], 'addLabelIds': ['UNREAD', 'INBOX', 'Label_2']}

如果有人可以提供帮助,我不明白它是如何运作的?

1 个答案:

答案 0 :(得分:1)

这里的问题是 labelId 和 labelName 之间的混淆。传递给gmail api 的labelId 用户实际上是gmail 标签字段name 而不是id。

首先调用api请求所有标签可以找到真正的标签ID:

labelsList = service.users().labels().list(userId='me').execute()
print(labelsList)

我认为 labelsList var 是一个 dict 类型,并为每个标签分配了“id”和“name”。然后可以通过使用更新后的 labelId 调用 api 来使用上述代码。

用户可能有一个不幸的巧合,即已经有一个 ID 设置为“Label_2”的标签。希望这对其他人有帮助。