在时间戳后获取新的 Gmail 电子邮件

Fetching new Gmail emails after a timestamp

我正在查看 Gmail API 文档 (https://developers.google.com/gmail/api),我能够阅读收件箱中存在的所有用户电子邮件。

例如片段(阅读完整的电子邮件列表):

for {
        req := svc.Users.Messages.List("me")
        r, _ := req.Do()
        for _, m := range r.Messages {
            msg, _ := svc.Users.Messages.Get("me", m.Id).Do()
            date := ""
            for _, h := range msg.Payload.Headers {
                if h.Name == "Date" {
                    date = h.Value
                    break
                }
            }
            msgs = append(msgs, message{
                ...
            })
        }
    }

现在,当收到新电子邮件时,我也想阅读它们(立即阅读或稍后阅读)。我可以为此编写计划作业,但我不确定我是否可以在特定时间戳或电子邮件标识符之后获取电子邮件。我不想一次又一次地阅读一大堆电子邮件来找出新电子邮件,这样会涉及很多不必要的计算。有什么办法可以让这个任务更容易吗?

Looking at the docs,貌似支持一个查询参数,q.

查询参数支持的选项与 Gmail 搜索栏中可用的选项相同:

Only return messages matching the specified query. Supports the same query format as the Gmail search box. For example, "from:someuser@example.com rfc822msgid:somemsgid@example.com is:unread". Parameter cannot be used when accessing the api using the gmail.metadata scope.

这意味着您可以执行类似 "after:YYYY/MM/DD" 的操作或使用时间戳 "after:1616819452"

req := svc.Users.Messages.List("me").Q("after:2021/01/01")

在此处查看完整用法https://pkg.go.dev/google.golang.org/api/gmail/v1#UsersMessagesListCall.Q