从 gmail 获取消息 ID 非常慢
Posted
技术标签:
【中文标题】从 gmail 获取消息 ID 非常慢【英文标题】:getting messaged id's from gmail is very slow 【发布时间】:2020-12-14 23:38:31 【问题描述】:我使用 .net 4.5 版创建了类库,语言是 c#。从 gmail API 获取 6 封电子邮件需要花费几分钟的时间。 下面是我用来获取邮件详细信息的代码
public Message GetMailDetails(GmailService service, string EmailId, string MessageID)
try
var a = service.Users.Messages.Get(EmailId, MessageID);
a.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Metadata;
var retMessage = a.Execute();
//a.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Metadata;
//retMessage = a.Execute();
//a.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Minimal;
//retMessage = a.Execute();
//a.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw;
//retMessage = a.Execute();
return service.Users.Messages.Get(EmailId, MessageID).Execute();
catch (Exception e)
return null;
【问题讨论】:
听起来您的互联网连接有问题。不知道我们如何回答我看不出您发布的代码有什么问题。可以是任何东西。 你有什么想法吗,我怎样才能在这段代码中实现部分响应,以便我可以只提取我需要的那些参数,而不是提取所有数据? 根据 Gmail API docslist
返回资源仅包含一个 id 和一个 threadId - 所以至少 list
调用不会返回所有数据。
@ShubhamAngne 尝试使用 Fields 参数,它将允许您限制响应。
我添加了用于获取邮件详细信息的代码,您能帮忙传递字段参数@DaImTo
【参考方案1】:
您可以尝试使用名为 Partial response 的东西来进行测试,最简单的测试方法是浏览 try me 页面 try me,您需要一个消息 ID 来测试它
message.get 的完整响应如下所示
"id": "1742abfd3a4f1c5",
"threadId": "1742a8c81816e51",
"labelIds": [
"CHAT"
],
"snippet": "I'm surprised nobody questioned me when I said that the tag was 2 weeks old, but clearly has questions from longer than 2 weeks ago. :",
"payload":
"partId": "",
"mimeType": "text/html",
"filename": "",
"headers": [
"name": "From",
"value": "Axxxx"
],
"body":
"size": 139,
"data": "SSYjMzk7bSBzdXJwcmlzZWQgbm9ib2R5IHF1ZXN0aW9uZWQgbWUgd2hlbiBJIHNhaWQgdGhhdCB0aGUgdGFnIHdhcyAyIHdlZWtzIG9sZCwgYFybHkgaGFzIHF1ZXN0aW9ucyBmcm9tIGxvbmdlciB0aGFuIDIgd2Vla3MgYWdvLiB7Og=="
,
"sizeEstimate": 100,
"historyId": "6172496",
"internalDate": "1598445048740"
通过将字段参数添加到您的请求 fields=id,threadid 响应看起来像这样
"id": "1742abfd3a4f16c5",
"threadId": "1742a8c181816e51"
基本上,您只请求要查看的数据字段。
示例
var request = service.Users.Messages.Get(EmailId, MessageID)
request.Fields = "id,threadid";
var response = request.Execute();
当您尝试从数组或列表中挑选内容时,字段可能会有点棘手,我真的建议您在 try me 中对其进行测试。
【讨论】:
我让它像这样工作 a.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Metadata;列表 标头 = 新列表(); headers.Add("日期"); headers.Add("主题"); headers.Add("抄送"); headers.Add("发件人"); headers.Add("密件抄送"); headers.Add("To"); a.MetadataHeaders = 标头;以上是关于从 gmail 获取消息 ID 非常慢的主要内容,如果未能解决你的问题,请参考以下文章
Gmail API:在使用查询执行 messages.list 时,有没有办法获取 RFC822 消息 ID?
通过 Mailcore 2 获取 Gmail:线程 ID、消息 ID 和 UID
如何在gmail中发送电子邮件之前或之后获取消息ID? [复制]
使用 Powershell 从 GMAIL API 获取消息正文