仅在有新邮件到达时接收 Gmail 推送通知
Posted
技术标签:
【中文标题】仅在有新邮件到达时接收 Gmail 推送通知【英文标题】:Receive Gmail push notification only when a new message arrives 【发布时间】:2015-10-21 11:53:06 【问题描述】:我正在尝试制作一个应用程序,该应用程序将查明收件人是否已经使用 GMAIL 的推送通知回复了我的电子邮件。 它运行良好,但问题是,我正在收到有关我的 gmail 任何更改的通知。
这是我使用的代码
request =
'labelIds': ['UNREAD'],
'topicName': topic,
'labelFilterAction': 'include'
service.users().watch(userId=user.google_id, body=request).execute()
然后我尝试使用 'labelFilterAction': 'exclude'
system_labels = ['CATEGORY_UPDATES', 'UNREAD', 'DRAFT', 'CATEGORY_PROMOTIONS', 'INBOX', 'CATEGORY_SOCIAL', 'CATEGORY_PERSONAL', 'CATEGORY_FORUMS', 'TRASH', 'CHAT', 'IMPORTANT', 'SENT', 'STARRED', 'SPAM']
system_labels.remove('UNREAD')
request =
'labelIds': system_labels,
'topicName': topic,
'labelFilterAction': 'exclude'
service.users().watch(userId=user.google_id, body=request).execute()
有了这个,我根本没有收到任何通知。 有什么建议吗?
【问题讨论】:
新的未读邮件也有INBOX
-标签,所以我认为所有新邮件都会被排除在外。也试试system_labels.remove('INBOX')
,你至少会过滤掉很多消息,但可能不是全部。
我尝试这样做,但我仍然没有收到任何通知。
嗯...试试system_labels.remove('INBOX')
、system_labels.remove('UNREAD')
和system_labels.remove('CATEGORY_PERSONAL')
。我想就是这样! :)
@khulas15 您是否设法只收到UNREAD
中的更改通知?
【参考方案1】:
工作python代码
credentials = get_credentials(email)
http = credentials.authorize(httplib2.Http())
service = discovery.build('gmail', 'v1', http=http)
request =
'labelIds': ['CATEGORY_PERSONAL'],
'topicName': 'projects/myproject/topics/getNotification',
'labelFilterAction': 'exclude'
service.users().watch(userId='me',body=request).execute()
【讨论】:
仅供参考,这不起作用,API 无法有效过滤标签,包括系统标签(请参阅issuetracker.google.com/issues/36759803)。每次单击电子邮件时,上述代码都会收到 UNREAD 通知,因此您将看到至少两个通知,并且您不会收到 CATEGORY_PERSONAL 的任何通知。文档是错误的(阅读谷歌问题跟踪器)以上是关于仅在有新邮件到达时接收 Gmail 推送通知的主要内容,如果未能解决你的问题,请参考以下文章
我们可以使用云发布/订阅接收多个用户到同一推送端点的 gmail 推送通知吗
Python 和 GmailAPI:如何监控 Gmail 收件箱以获取新电子邮件?
收到来自 gmail users.watch API 的推送通知后如何阅读用户 gmail?