【问题标题】:Python and GmailAPI: How to monitor Gmail inbox to get new emails?Python 和 GmailAPI:如何监控 Gmail 收件箱以获取新电子邮件?
【发布时间】: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,以便我的程序可以实际接收发送到我的主题的消息。

【问题讨论】:

    标签: python push-notification gmail gmail-api google-cloud-pubsub


    【解决方案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.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() 的形式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2014-10-19
    • 2020-02-13
    • 2017-05-15
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多