Python 和 GmailAPI:如何监控 Gmail 收件箱以获取新电子邮件? 在推送通知后获取电子邮件的内容参考资料

问题描述

我正在编写一个 Python 程序,试图监控我的 Gmail 收件箱。每当收到新电子邮件时,我的程序应该会收到实际的电子邮件内容。我认为最好的方法是使用 Gmail API 通过 Google 推送通知

我已经创建了一个主题订阅,以及使用这些手动发送和接收消息。我已经完成了 Google 发布订阅设置,并在我的收件箱中调用了 watch()。如果我理解正确,那么成功的 watch() 调用意味着我的收件箱将受到持续监控。每当我收到一封新电子邮件时,都应该向我的主题发送一条 {emailAddress,historyId} 形式的消息。

由此,我如何才能真正获得电子邮件内容?根据教程,我必须执行类似 history.list( ) 的操作才能获取“自上次已知 historyId 以来用户的更改详细信息”。这些“更改细节”究竟是什么?它们会是实际的电子邮件内容吗?

我的下一步应该是设置 REST 拉订阅吗?我正在考虑使用此链接https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions/pull 以便我的程序可以实际接收发送到我的主题的消息。

解决方法

在推送通知后获取电子邮件的内容

如您所见,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 脚本,这同样取决于您的特定需求。

参考资料