API, который читает непрочитанные письма с определенным описанием, но при прочтении удаляет метку НЕПРИТАННО.Python

Программы на Python
Anonymous
API, который читает непрочитанные письма с определенным описанием, но при прочтении удаляет метку НЕПРИТАННО.

Сообщение Anonymous »

У меня есть скрипт Python, который взаимодействует с API Gmail и ищет непрочитанные письма с определенным описанием и с определенных адресов электронной почты. Но я хочу, чтобы при чтении почты удалялась метка НЕПРИТАННО, чтобы она не обнаруживалась при повторном запуске сценария.

Код: Выделить всё

from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']

def main():
"""Shows basic usage of the Gmail API.
Lists the user's Gmail labels.
"""

email_address1 = "mensajeria@bancoestado.cl"
email_address2 = "noreply@correo.bancoestado.cl"

creds = None

if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)

service = build('gmail', 'v1', credentials=creds)

# Call the Gmail API
results = service.users().labels().list(userId='me').execute()
labels = results.get('labels', [])

#Get Messages
results = service.users().messages().list(userId='me', labelIds=['INBOX'], q=f'from:{email_address1} OR from:{email_address2} is:unread').execute()
messages = results.get('messages', [])

#Messages Filter
message_count = 100
for message in messages[:message_count]:
msg = service.users().messages().get(userId='me', id=message['id']).execute()
email = (msg['snippet'])
if "que recibiste Monto $" in email:
print(f'{email}\n')
service.users().messages().modify(userId='me', id=message['id'], body={'removeLabelIds': ['UNREAD']}).execute()

if __name__ == '__main__':
main()

Скрипт работает нормально, пока не достигнет моей попытки удалить метку НЕПРИТАННО и не обнаружит ее снова. Здесь

Код: Выделить всё

service.users().messages().modify(userId='me', id=message['id'], body={'removeLabelIds': ['UNREAD']}).execute()
Я знаю, что это можно сделать, потому что в разделе меток документации Gmail API сказано, что метку UNREAD можно изменить вручную.
Так что, если кто-нибудь сможет мне помочь, я буду признателен.

Подробнее здесь: https://stackoverflow.com/questions/753 ... -when-read

Вернуться в «Python»