【发布时间】:2020-01-13 02:06:07
【问题描述】:
我尝试过使用 获取https://www.googleapis.com/gmail/v1/users/userId/messages
但只获取 id 和 threadId 作为响应。
我想显示带有标题和来自电子邮件的电子邮件列表。是否存在获取信息的 api 或任何我可以获取的方式?
【问题讨论】:
-
@DalmTo 你能给个方法吗?
标签: google-api gmail-api
我尝试过使用 获取https://www.googleapis.com/gmail/v1/users/userId/messages
但只获取 id 和 threadId 作为响应。
我想显示带有标题和来自电子邮件的电子邮件列表。是否存在获取信息的 api 或任何我可以获取的方式?
【问题讨论】:
标签: google-api gmail-api
Gmail API 的设计方式是,
GET https://www.googleapis.com/gmail/v1/users/userId/messages 获取所有感兴趣的电子邮件的 ID(您可以使用搜索参数 q 过滤结果) - 就像您已经做过的那样GET https://www.googleapis.com/gmail/v1/users/userId/messages/id 的 ID 分别检索每条消息
如果您使用您选择的语言编写代码,您可以使用循环自动执行此过程。
示例如何使用Apps Script:
function myFunction() {
var myMessages=Gmail.Users.Messages.list("me",{'maxResults': 5 }).messages;
Logger.log(myMessages);
for(var i=0;i<myMessages.length;i++){
var id=myMessages[i].id;
Gmail.Users.Messages.get('me', id).payload.headers.forEach(function(e){
if(e.name=="Subject"||e.name=="From"){
Logger.log(e.name+": "+e.value)
}
}
);
}
}
【讨论】:
user messages.list 方法只返回消息 id 和线程 id 的消息列表。这是 API 本身的限制,您无法更改它。它是一个免费的 api,我们受到 google 的限制。
{
"messages": [
{
"id": "16d1f7849145662a",
"threadId": "16d1f55457d4e145"
},
{
"id": "16d1f69d541016ee",
"threadId": "16d1f55457d4e145"
},
为了获得有关该消息的更多信息,您需要在每条消息上添加message.get。
GET https://www.googleapis.com/gmail/v1/users/userId/messages/id
抱歉,这是获得大量信息的唯一途径。
您可以尝试批处理端点batch 在单个批处理请求中您最多只能调用 100 个。如果您需要进行更多调用,请使用多个批处理请求。
内容类型多部分/混合;边界=batch_foobarbaz;类型=应用程序/http
授权承载 ya29.GluBB7_cEfLMThXKuxR_9g8YyjSTLwBHRHdPtiYXwDABKQlrbxEyFqSFsnFYTs5b54W7
接受编码应用程序/gzip
--batch_foobarbaz
Content-Type: application/http
GET gmail/v1/users/me/messages/16d24956228a98c4
Accept: application/json; charset=UTF-8
--batch_foobarbaz
Content-Type: application/http
GET gmail/v1/users/me/messages/16d24956228a98c4
Accept: application/json; charset=UTF-8
--batch_foobarbaz--
除此之外,您还可以访问smtp server directly。这将需要一种可以处理对邮件服务器的直接调用的编程语言。
【讨论】: