【发布时间】:2016-09-28 20:16:45
【问题描述】:
我想从我的 Gmail 下载整个收件箱(电子邮件正文和附件)。使用消息 ID,我可以获得 Gmail.Message 对象,但这些对象似乎只包含 sn-ps(大约 200 个字符)。
对于 C#,有没有办法使用 Gmail API 以 XML 格式获取整个收件箱?
【问题讨论】:
-
您所做的 API 调用究竟是什么?你能提供HTTP请求吗?
我想从我的 Gmail 下载整个收件箱(电子邮件正文和附件)。使用消息 ID,我可以获得 Gmail.Message 对象,但这些对象似乎只包含 sn-ps(大约 200 个字符)。
对于 C#,有没有办法使用 Gmail API 以 XML 格式获取整个收件箱?
【问题讨论】:
gmail API 请参考https://developers.google.com/gmail/api/v1/reference/users/messages/list#parameters
HTTP 请求
确保您在请求中应用了正确的授权标头。
【讨论】:
根据the documentation,可以使用
GET https://www.googleapis.com/gmail/v1/users/userId/messages/id
这是您正在使用的电话吗?它说默认格式是Full:
"full":返回完整的电子邮件消息数据,正文内容在有效负载字段中解析;未使用原始字段。 (默认)
要获取附件,您可以尝试 Users.messages.attachments:
GET https://www.googleapis.com/gmail/v1/users/userId/messages/messageId/attachments/id
但为此,您需要附件 ID。您可能想查看显示可用数据的User.messages overview,也许您可以尝试Payload 调用?
【讨论】:
查看 API,您需要先向 /users/me/threads 发出请求,然后再向 users/me/threads/<id> 发出请求,在该响应中有一个 body.data 值,它是 base 64 编码的。我不是 100% 确定使用 c# API,但我假设你会做类似的事情:
var request = service.Users.Threads.List("me");
var labels = request.Execute().Threads;
foreach(var thread in lables){
var threadReqeust = service.Users.Threads.Get("me", thread.Id);
var data = threadReqeust.Execute();
//you have your entire message now
}
(请注意这是半伪代码,因为我没有使用 gmail api 进行检查)
(https://developers.google.com/gmail/api/v1/reference/users/threads/list) (https://developers.google.com/gmail/api/v1/reference/users/threads/get) “如果正文数据包含在单独的附件中,则存在附件 ID。”
另一种选择是始终使用 IMAP 登录(使用 ImapX 或等效的),并以这种方式收集数据,但使用 API 会更好。
【讨论】: