使用 Python 和 Gmail API 将电子邮件标记为已读

Marking Emails as Read Using Python and Gmail API

我正在编写一个脚本,它从电子邮件收件箱获取消息,检查消息的主题,有条件地打印 .pdf 附件,然后将消息标记为 read

我可以阅读消息,打印 .pdf 文件条件,但无法将消息标记为 read

我正在尝试使用以下函数来标记为 read:

def markEmailAsRead(service, message):
service.users().messages().modify()(userId='me', id=message['id'], body={'removeLabelIds': ['UNREAD']}).execute()

这与我浏览过的每个网站都一样,但我收到以下错误:

Traceback (most recent call last):
  File "path/main.py", line 110, in <module>
    main()
  File "path/main.py", line 64, in main
    mapHeaders(service=service, message=m)
  File "path/main.py", line 78, in mapHeaders
    markEmailAsRead(service=service, message=message)
  File "path/main.py", line 107, in markEmailAsRead
    service.users().messages().modify()(userId='me', id=message['id'], body={'removeLabelIds': ['UNREAD']}).execute()
  File "path\discovery.py", line 972, in method
    raise TypeError('Missing required parameter "%s"' % name)
TypeError: Missing required parameter "userId"

Process finished with exit code 1

我也按照这里的最后一个答案 - How to mark messages as read using gmail api as i parse? 但我仍然遇到同样的错误...

我过去没有使用过 Gmail API,但是我相信你在这里犯了一个简单的错误:

File "path/main.py", line 107, in markEmailAsRead
    service.users().messages().modify()(userId='me', id=message['id'], body={'removeLabelIds': ['UNREAD']}).execute()

您已尝试传递正确的参数,但是您在与修改方法相关的括号之外进行了传递,并且不小心添加了一组额外的括号。

修改后的代码为:

service.users().messages().modify(userId='me', id=message['id'], body={'removeLabelIds': ['UNREAD']}).execute()

我可能是错的,但这是我通过快速阅读可以得出的结论。