Gmail API:试图将邮件标签设置为我创建的标签时出现“无效标签”

2024-05-23 15:36:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过典型的方法在gmail的web界面中创建了一个标签“handler_gmail”。

当我试图通过gmailapi(Python客户机库)为消息设置标签时,得到的响应是HttpError 400,返回“Invalid label:handler_Gmail”。在

我确信这个标签是存在的(我已经检查了很多次了,没有错别字)。在

我想把它设置成这样:

gs.users().messages().modify(userId=username, id=m['id'], body={"addLabelIds": ['handler_gmail']}).execute()

我尝试向字典中添加一个"removeLabelIds": []键/值对(可能是必需的),但是得到了相同的“Invalid label”错误。在

如有任何帮助,我们将不胜感激!如此接近能够做我需要做的这个项目!在


Tags: 方法webid消息客户界面标签label
3条回答

我实现了一个解析器来将我的标签名更改为ID

def ModifyMessage(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']

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

def GetLabelIds(service, labels_in):
    result = []
    results = service.users().labels().list(userId='me').execute()
    labels = results.get('labels', [])

    for label_in in labels_in:
        for label in labels:
            if label['name'] == label_in:
                result.append(label['id'])
                break
    return result

现在我这样称呼标签创造者:

^{pr2}$

我调用的主代码如下所示

ModifyMessage(service, 'me', id, CreateMsgLabels(service))

我可以通过打印列出系统和用户标签(用户.gs().labels().list(userId=username).execute())

这表明我的标签的标签ID是另一个东西(“label_1”的名字是“handler_gmail”)。因此,我将创建一个支持方法,通过名称获取标签ID,并使用ID将标签添加到消息中(通过modify)

谢谢!在

正如其他人所指出的,您必须使用标签id,而不是标签名称。我通过使用gmailapi的sample code解决了这个问题,并对其进行了修改,以打印除名称外的id:

results = service.users().labels().list(userId='me').execute()
labels = results.get('labels', [])

if not labels:
    print('No labels found.')
else:
  print('Labels:')
  for label in labels:
    print(label['name']+ " "+label['id'])

因此,一旦获得相应的id,代码应该类似于:

^{pr2}$

相关问题 更多 >