使用Gmail API获取Google Group电子邮件

2022-04-14 00:00:00 python email gmail-api gmail google-groups

问题描述

我正在努力获取电子邮件的大型文本语料库。在Google Group中没有允许阅读消息的API。因此,另一种方法是使用Gmail帐户,该帐户是该组的成员。通过使用这个Gmail,我可以查看发送给该群组的所有消息。我正在使用python和Gmail API来获取邮件。我面临的问题是,我无法获取来自群的电子邮件。

results = service.users().messages().list(userId='me',q="from:support-dev-group@wso2.com", maxResults=10).execute()

当我用另一个普通用户ID替换from:时,它正常工作。当我将from:替换为组电子邮件ID时,结果为零。我可以获得通过我的Gmail获取群gmail的实际代码吗?

第二个问题是

当我使用某人的邮件查询时:

results = service.users().messages().list(userId='me',q="from:xyz@wso2.com", maxResults=10).execute()

我得到的结果是这样的

{'resultSizeEstimate': 82, 'messages': [{'id': '1653929b0b414390', 'threadId': '1644c19f390faf28'}, {'id': '165330aaa5bb9134', 'threadId': '16532ef13e7eec8d'}......

这里它只返回消息id。为了获得带有标题的正文的邮件,我必须再次查询每个id。我不能在一个查询中获得完整的JSON吗?


解决方案

对于第一部分,您的查询是向后的:电子邮件被发送到组,来自用户。此查询应返回发送到组的所有消息:

to:support-dev-group@wso2.com

(您可以很容易地在Gmail中测试它,因为它在搜索框中使用相同的查询规范)。

接下来,要获取给定消息ID的完整消息,请使用users.messages.get和格式‘Full’选项,请参阅:https://developers.google.com/gmail/api/v1/reference/users/messages/get

您确实需要为每条消息调用它一次,但是您可以提交一批GET请求来有效地完成它,只需一次。然后,您可以使用历史ID仅获取新消息:

来自"将客户端与Gmail同步"https://developers.google.com/gmail/api/guides/sync

调用Messages.list以检索消息ID的第一页。

创建Messages.Get请求的批处理请求 LIST请求返回的消息。如果您的应用程序显示 消息内容,应首先使用FORMAT=FULL或FORMAT=RAW 应用程序检索消息并将结果缓存到 避免额外的检索操作。如果要检索的是 以前缓存的消息,则应使用FORMAT=MINIMAL来减少 响应的大小,因为只有LabelID可以更改。

将更新合并到缓存结果中。您的应用程序应该 存储最新消息(第一条消息位于 列表响应)以供将来进行部分同步。

参见:https://developers.google.com/gmail/api/guides/batch

相关文章