Python 和 GmailAPI:如何监控 Gmail 收件箱以获取新电子邮件?
Posted
技术标签:
【中文标题】Python 和 GmailAPI:如何监控 Gmail 收件箱以获取新电子邮件?【英文标题】:Python and GmailAPI: How to monitor Gmail inbox to get new emails? 【发布时间】:2021-09-10 05:36:04 【问题描述】:我正在编写一个尝试监控我的 Gmail 收件箱的 Python 程序。每当有新电子邮件到达时,我的程序应该会收到实际的电子邮件内容。我认为最好的方法是使用 Gmail API 通过 Google 推送通知。
我已经创建了一个主题和订阅,以及使用这些手动发送和接收消息。我已经完成了 Google pub-sub 设置并在我的收件箱中调用了 watch()。如果我理解正确,成功的 watch() 调用意味着我的收件箱将被持续监控。每当我收到一封新电子邮件时,都应将 emailAddress, historyId 形式的消息发送到我的主题。
据此,我如何才能真正获得电子邮件内容?根据本教程,我必须执行history.list( )
之类的操作才能获取“自用户上次知道的 historyId 以来的更改详细信息”。这些“变更细节”究竟是什么?它们会是实际的电子邮件内容吗?
我的下一步应该是设置 REST 拉取订阅吗?我正在考虑使用此链接:https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions/pull,以便我的程序可以实际接收发送到我的主题的消息。
【问题讨论】:
【参考方案1】:在推送通知后获取电子邮件的内容
如您所见,users.watch
订阅将向您发送:
"historyId": string,
"expiration": string
有了这个historyId
,你可以调用users.history.list
端点来获取:
"history": [
"id": "[historyId]",
"messages": [
"id": "[MSG ID]",
"threadId": "[THREAD ID]"
]
]
您可以从那里调用users.messages.get
端点来获取实际消息。
注意:对于某些历史 ID,每个 historyId 会收到多个消息/线程/或事件,因此根据您的需要,您需要与接收者一起处理。
有几个选项,但您可以使用cloud function 来接收通知。
您也可以简单地设置一个 cron 作业以每隔 X 分钟运行一次 Python 脚本,这取决于您的具体需求。
参考文献
users.watch users.history.list users.messages.get【讨论】:
我有一个后续问题:假设我想致电users.history.list
。我将在我的代码中进行的实际调用是什么?如果我输入users.history.list
,则表示未定义用户。
当然,Darrel,但一般来说,最好在新问题中提出后续问题(请参阅How to ask follow up questions)。我认为,如果您遇到该错误,那么对您来说最好的办法是按照 python 快速入门启动并运行 - developers.google.com/gmail/api/quickstart/python - 您会看到通常事情遵循 results = service.users().history().list().execute()
的形式以上是关于Python 和 GmailAPI:如何监控 Gmail 收件箱以获取新电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Gmail API (python) 检索整个邮件正文
使用 Gmail API 发送大型附件时出现错误 10053