Google-api-go-client:列出带有标签的邮件并获取标题字段。

huangapple go评论95阅读模式
英文:

Google-api-go-client: listing messages w/ label and fetching header fields

问题

我想列出具有特定标签的消息。所以我使用了谷歌的Go快速入门代码,并将范围设置为gmail.MailGoogleComScope。

使用以下代码可以正常获取具有标签"INBOX"的所有消息:

mes, err := srv.Users.Messages.List(user).LabelIds("INBOX").Do()

但是,当我将"INBOX"替换为"TEST"时,我会收到错误消息:

无法检索消息。googleapi: 错误 400: 无效的标签: TEST,invalidArgument 退出状态 1

而且确实存在一个名为TEST的标签。我做错了什么?

英文:

I want to list messages with a specific label. So I used the Go Quickstart code from google and set the scope to gmail.MailGoogleComScope.

Getting a list of all messages with label "INBOX" works fine using this code

    mes, err := srv.Users.Messages.List(user).LabelIds("INBOX").Do()

but when I replace "INBOX" with "TEST" I get the error:

> nable to retrieve Messages. googleapi: Error 400: Invalid label: TEST,
> invalidArgument exit status 1

and there is a label with name TEST. What am I doing wrong?

答案1

得分: 6

“INBOX”的标签名称和ID是相同的。但是,有一种情况可以区分标签名称和标签ID。您有两种方法可以检索标签的消息列表。以下脚本假设使用了谷歌的Go Quickstart

1. 检查标签ID并检索消息列表

检索标签名称和ID:

mes, err := srv.Users.Labels.List(user).Do()
if err != nil {
    log.Fatalf("Error: %v", err)
}
for _, e := range mes.Labels {
    fmt.Println(e.Name + ", " + e.Id)
}

使用labelID检索消息列表:

mes, err := srv.Users.Messages.List(user).LabelIds(labelID).Do()
if err != nil {
    log.Fatalf("Error: %v", err)
}
for _, e := range mes.Messages {
    fmt.Println(e.Id)
}

2. 使用“Q”检索消息列表

mes, err := srv.Users.Messages.List(user).Q("label:labelname").Do()
if err != nil {
    log.Fatalf("Error: %v", err)
}
for _, e := range mes.Messages {
    fmt.Println(e.Id)
}

这可以直接检索标签名称的消息列表。参数“Q”的用法与Gmail搜索框相同。

参考资料:

  1. Users.messages: list https://developers.google.com/gmail/api/v1/reference/users/messages/list

  2. Users.labels: list https://developers.google.com/gmail/api/v1/reference/users/labels/list

英文:

The label name and ID of "INBOX" are the same. But, there is a case to differ between the label name and label ID. You have 2 methods for retrieving message list of the label. Following scripts suppose the use of Go Quickstart from google.

1. Check label IDs and retrieve message list

Retrieve label names and IDs :

mes, err := srv.Users.Labels.List(user).Do()
if err != nil {
	log.Fatalf("Error: %v", err)
}
for _, e := range mes.Labels {
	fmt.Println(e.Name + ", " + e.Id)
}

Retrieve message list using labelID :

mes, err := srv.Users.Messages.List(user).LabelIds(labelID).Do()
if err != nil {
	log.Fatalf("Error: %v", err)
}
for _, e := range mes.Messages {
	fmt.Println(e.Id)
}

2. Retrieve message list using "Q"

mes, err := srv.Users.Messages.List(user).Q("label:labelname").Do()
if err != nil {
	log.Fatalf("Error: %v", err)
}
for _, e := range mes.Messages {
	fmt.Println(e.Id)
}

This can be directly retrieved a message list for the label name. Parameters of "Q" are the same to the Gmail search box.

References :

  1. Users.messages: list https://developers.google.com/gmail/api/v1/reference/users/messages/list

  2. Users.labels: list https://developers.google.com/gmail/api/v1/reference/users/labels/list

huangapple
  • 本文由 发表于 2017年3月28日 06:26:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/43057478.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定