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

Python:如何从 gmail API 获取电子邮件的主题

灰色预测GM(1,n)模型_python

如何使用GM 命令

从 Gmail API 解码 MIME 电子邮件 - \r\n 和 3D - Python