Google Pub/Sub webhook 调用服务器后无法检索消息内容
Unable to retrieve message content after Google Pub/Sub webhook call to server
我已经订阅了 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"}
我应该如何获取电子邮件内容?
有点晚了,但其他人可能会感兴趣。答案是。
基本上你从 watch 调用中得到一个 historyId。存储它。
然后当您收到来自 Gmail 的通知时:
- 跟踪 historyId
- 使用存储的 historyId(来自 watch 调用)获取历史列表 (gmail.users.history.list)
- 从历史记录中导入所有需要的消息
- 完成后,将当前的 historyId 替换为通知中的 historyId。
希望对您有所帮助。
我已经订阅了 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"}
我应该如何获取电子邮件内容?
有点晚了,但其他人可能会感兴趣。答案是
- 跟踪 historyId
- 使用存储的 historyId(来自 watch 调用)获取历史列表 (gmail.users.history.list)
- 从历史记录中导入所有需要的消息
- 完成后,将当前的 historyId 替换为通知中的 historyId。
希望对您有所帮助。