【发布时间】:2017-09-12 08:15:54
【问题描述】:
我订阅了 Google Cloud Pub/Sub,创建了一个主题并使用指向我服务器上的 URL 的 webhook 创建了订阅。然后,我使用 Gmail API 在我在我的 Gmail 帐户中创建的特定标签上调用 watch 并将其与我创建的主题相关联。
当我的邮件到达我的 Gmail 帐户中的标签时,webhook 会触发对我服务器上 URL 的 POST 请求。但无论邮件内容是什么,POST 正文总是这样:
{
"message": {
"attributes": {},
"data": "eyJlbWFpbEFkZHJlc3MiOiJteWVtYWlsQG15ZG9tYWluLmNvbSIsImhpc3RvcnlJZCI6MTIzNDU2N30K",
"messageId": "12345678900000", # only relevant to Pub/Sub
"message_id": "12345678900000",
"publishTime": "2017-04-16T15:42:08.968Z",
"publish_time": "2017-04-16T15:42:08.968Z"
},
"subscription": "projects/proj-name/subscriptions/sub-name"
}
data 字段采用 Base64 编码,在本例中为:
{"emailAddress":"myemail@mydomain.com","historyId":1234567}
无论电子邮件内容是什么,我每次都会得到这样的结果。但是,如果从 google 开发者控制台运行发布测试,data 字段中的 base64 编码值是我指定的实际消息字符串。
我尝试使用来自 base64 解码的 data 值的 historyId 使用 Gmail API 对 history.list 进行后续调用,但我得到的只是这样的响应:
{"historyId": "1234567"}
我想如何获取电子邮件内容?
【问题讨论】:
-
似乎不知何故,发送的请求默认使用
metadata/minimalformat。我没有深入研究 Google Pub/Sub,但可能只是缺少一个参数。 -
如果是这样,我想知道您应该如何指定推送请求的格式。
watch请求本身并没有为此提供参数,我也没有看到控制台推送请求的任何配置。
标签: gmail gmail-api google-cloud-pubsub