В вашем коде есть несколько ошибок. Во-первых, убедитесь, что ArchiveScope
- это список, содержащий области, необходимые для приложения. Для обновления, создания или удаления меток GMail достаточно либо https://www.googleapis.com/auth/gmail.readonly
или https://www.googleapis.com/auth/gmail.labels
, либо , как указано здесь .
Ваш код предполагает, что вы пытаетесь удалить ярлык "INBOX" и добавить новый ярлык "MyLabel". Метод, описанный service.users().labels().update()
, может использоваться только для изменения информации о существующих ярлыках, которые есть в учетной записи GMail, а не для создания или удаления. Кроме того, метка «Входящие» является зарезервированной меткой и не может быть удалена. Когда делается правильный запрос на удаление этой метки, сервер получает «Неверный запрос на удаление», как показано ниже.
DELETE https://www.googleapis.com/gmail/v1/users/me/labels/INBOX
{
"error": {
"code": 400,
"message": "Invalid delete request",
"errors": [
{
"domain": "global",
"message": "Invalid delete request",
"reason": "invalidArgument"
}
]
}
}
Однако для отдельных писем можно удалить тег «Входящие» с помощью service.users().messages().modify()
и тело запроса {'removeLabelIds': ['INBOX'], 'addLabelIds': ['MyLabel']}
, которое вы использовали до . Это только удалит метку из указанного сообщения, но не удалит метку полностью.
Полную документацию по изменению содержимого существующей метки можно найти здесь , но параметр id должен равняться уникальному идентификатору метки, которую вы хотите редактировать, а полезная нагрузка тела должна быть словарём. структура, содержащая новое имя, для которого вы хотите изменить метку:
lbl_id = "Label_XXXXXXXXXXXXXXX"
msg_labels = {
'name' : [‘newLabelName’]
}
service.users().labels().update(userId='me', id=lbl_id, body = msg_labels).execute()
print('Message ID: %s' % lbl_id)
Чтобы создать метку, вы можете использовать функцию service.users().labels().create(userId=’me’, body={‘name’ : ‘MyLabel’ }).execute()
с теми же областями действия, что и update (). Поскольку ярлык еще не создан, идентификатор ярлыка не требуется.
Удаление метки - то же самое, хотя service.users().labels().delete(userId=’me’).execute()
используется без тела. В отличие от create (), службе удаления требуется идентификатор метки , однако этот запрос не возвращает ответ.