Python Gmail API读取所有消息,而不是未读的消息
我正在尝试使用下面的代码从gmail帐户获取所有未读的信息Python Gmail API读取所有消息,而不是未读的消息,python,python-3.x,gmail,gmail-api,Python,Python 3.x,Gmail,Gmail Api,我正在尝试使用下面的代码从gmail帐户获取所有未读的信息 msgs = service.users().messages().list(userId='me',q='in:inbox is:unread').execute() flag=1 while flag==1: for i in range(0,len(msgs['messages'])): message = service.users().messages().get(userId='me', id=ms
msgs = service.users().messages().list(userId='me',q='in:inbox is:unread').execute()
flag=1
while flag==1:
for i in range(0,len(msgs['messages'])):
message = service.users().messages().get(userId='me', id=msgs['messages'][i]['id']).execute()
print(message['snippet'])
if 'nextPageToken' in msgs.keys():
msgs = service.users().messages().list(userId='me',pageToken= msgs['nextPageToken']).execute()
else:
flag=0
上述代码的逻辑
API返回100个消息ID和一个名为nextPageToken
的下一页ID。我们使用这个令牌获取接下来的100个消息ID等等。如果没有下一个页面,它将没有令牌,因此我的最后4行代码将检查它是否存在。如果不存在,则将标志设置为0,while循环完成
问题
上面的代码获取所有消息(已读和未读)
尝试过的其他方法
msgs = service.users().messages().list(userId='me',labelIds=['UNREAD']).execute()
及
可能的根本原因
我注意到,如果未读邮件数为100,则它会提取所有邮件(已读+未读)
我已经研究过了,但也没有帮助。让我感到困扰的是,您的代码只在第一个API调用中过滤消息 因此,在不过滤消息的情况下,您可以获得所有消息(已读或未读)。除了第一个呼叫(您正在筛选的唯一呼叫)
msgs=service.users().messages().list(userId='me',q='in:inbox is:unread')。execute()
标志=1
当flag==1时:
对于范围内的i(0,len(msgs['messages']):
message=service.users().messages().get(userId='me',id=msgs['messages'][i]['id']).execute()
打印(消息['snippet'])
如果msgs.keys()中的“nextPageToken”:
msgs=service.users().messages().list(userId='me',
q='in:inbox为:未读',将此添加到后续通话中
pageToken=msgs['nextPageToken']
).execute()
其他:
标志=0
请看中分页的示例。在这里,您可以看到如何为每个调用(而不仅仅是第一个调用)传递查询
试试看:
response=service.users().messages().list(userId=user\u id,
q=query.execute()
消息=[]
如果响应中有“消息”:
messages.extend(响应['messages'])
响应“nextPageToken”时:
page_token=响应['nextPageToken']
response=service.users().messages().list(userId=user\u id,q=query,
pageToken=page_token).execute()
messages.extend(响应['messages'])
返回消息
除了errors.HttpError,错误:
“打印”发生错误:%s“%s”错误
是的,我在下半场错过了页面标记属性。
msgs = service.users().messages().list(userId='me',q='in:inbox is:unread').execute()