什么时候 Gmail 里有了未读邮件?有没有主动提醒的办法?如果你也这么想,那么就部署一个 Gmail Notification 帮助我们检查 Gmail 邮箱。

2014-09-18 13:38:25 +08:00
 spance
何时应该检查Gmail邮箱有没有未读邮件,大概都要不停的登陆刷新。
怎么能让新邮件到达给个主动提醒,是我最近一直思考的问题。
于是查了Google的接口,非常丰富非常丰满,不愧是业界第一邮箱服务。
所以就诞生这个项目Gmail Notification
https://github.com/spance/Gmail-Notification

# Gmail Notification

对已许可的Gmail邮箱进行检查,发现新邮件后通过已配置的短信接口发送未读邮件的提醒短信。

利用Google oauth接口访问已授权用户的收件箱,对未读邮件进行分析并发送提醒,同一未读邮件在6小时内不会提醒超过2次(未来这些策略参数可调整),避免长时间未读邮件造成大量短信的骚扰。

目前,通过console交互方式配置许可授权,在.conf文件中定义接口参数,自动通过cron-job做定时检查。

每5分钟检查一次,支持多账户,理论上最多可以配置3472222个用户,因为Google API允许每个Client每天可调用1亿次。

扫描和通信日志在logs目录下,请定时检查并反馈错误。

![sms]()

# 关于隐私和安全性

邮箱账户通常是私密性的,因此不建议使用第三方服务,应该将程序部署到可信服务器上,专属的为自己或朋友私密的运行。

Google oauth接口是安全、可靠的,程序通过Google接口获得用户授权,不接触密码,并且用户可随时在Google accounts中吊销授权。

考虑到存储安全,程序不会读取和存储任何邮件内容包括标题,仅通过邮件id做识别和分析。

考虑到传输安全,发送的短信中不含有与邮件相关的任何内容,仅包括未读邮件数量,并且mail地址经过了遮掩。

如果运行程序的服务器是安全的,则整个运作逻辑都是安全和可靠的。

# 配置和运行

1、客户端授权

首先,需要得到Google client credential,这是访问Google API的必要条件。
访问: https://console.developers.google.com/project
开启API并创建Client credential,然后下载json文件,命名并放置到`credentials\app_client_secret.json`

![g_api_1]()
![g_api_2]()

2、配置

取得一个可用的短信接口(应该基于http/https)及访问办法,请咨询你的短信接口服务商。
根据服务商提供的方法,配置到`gnoti.conf`中,通常都是GET或POST到服务商api地址。
详细配置说明请参看`gnoti.conf`中的注释说明。

3、部署应用

安装依赖关系:`pip install --upgrade google-api-python-client python-crontab`
将整个程序放置到具有读写权限的文件夹中,并运行`python gnoti.py --help`查看命令帮助。

![help]()

4、账户授权

运行`python gnoti.py -a XXXX@gmail.com`以向导方式开始账户配置。
将会生成一个许可url,请账户所有者在其浏览器上执行并同意,将会跳到redirect_uri上(示例中配置到localhost上仅获取code部分)
再把Url上的code部分粘贴到console中,将会调用Google API获取授权。
再输入接收短信的电话号码,完成账户配置。

![setup]()

一切无误后,程序将会每5分钟检查一次用户邮箱,未读且未被提醒超过2次的邮件,将会统计和发送提醒短信。

*注: 目前大陆是无法访问到Google Api的,因此不要在国内服务器上部署。
9026 次点击
所在节点    分享创造
50 条回复
mulog
2014-09-18 23:35:24 +08:00
思路倒是不错 就是这需求好像太个性化了。。。
jaylong
2014-09-18 23:41:18 +08:00
我会告诉你我早就把gmail收件自动转发到139邮箱然后收免费短信通知了吗?
xcv58
2014-09-19 01:27:54 +08:00
感觉我用 Mailbox 的次数至少比短信多一个数量级。 不过这样不是更方便: http://cl.ly/image/2l3K46382N26
YonionY
2014-09-19 09:24:01 +08:00
直接POP或IMAP不就得了,哪里需要这么麻烦
chagel
2014-09-19 09:46:49 +08:00
这个需求是有的,尤其是伟大的墙的存在,近来手动刷mail的频率显然变高

解决方案有很多,既然楼主用这种重口的实现方式了,就不要polling了,用imap的idle实现实时吧
http://tools.ietf.org/html/rfc2177
spance
2014-09-19 10:31:23 +08:00
@sadaharu09
@jaylong
@YonionY
@chagel
请参看“第2条附言”。

@expkzb
你很厉害,ifttt是我之前也发现的,但其黑箱操作不够放心,于是就自己写做成开源。
欢迎试用,多提意见,多发pull
chagel
2014-09-19 11:18:12 +08:00
我换种说法吧,只是检查新邮件与其用强大的Google API,有些轻量的接口比如Inbox Feed可能更合适:
https://developers.google.com/gmail/gmail_inbox_feed

没有看项目代码,但看有每5分钟的Polling,那还不如在代码中用IMAP协议请求,还能达到实时检测目的:
https://developers.google.com/gmail/imap_extensions
hslx111
2014-09-19 11:47:33 +08:00
感觉这样的需求不会很强烈,大多数人还是会用客户端的。
YonionY
2014-09-19 13:00:02 +08:00
@spance 我很奇怪为什么会有这样奇怪的需求。新邮件知道强迫症?

1.没有邮件标题,你并不知道是什么邮件,难道收到一条提醒就去看一下吗?不知道为什么最近Gmail无法过滤一些垃圾邮件,遇到这样的你就很爽了。

2.如果不需要收到一条就看一次,那这样即使没有提醒也会定时查看,那提醒不就毫无意义了吗?

3.存储安全我觉得服务器比手机更不可靠,手机加密(并非手势密码)一下没有密码邮件残留数据很难泄露出去,如果手机全局加密都能被破解的,我想你更多需要考虑的是人身安全了。

4.如你所诉短信内容并无机密信息,其实只需要把短信内容给139/189邮箱发邮件并开通短信提醒,一个月几百条免费提醒短信应该也够了,虽然我觉得这样的需求很是蛋疼。
spance
2014-09-19 14:28:06 +08:00
@YonionY
1,邮件标题属于邮件内容一部分,不应该在不可靠传输途径的明文发送。垃圾邮件也是邮件,本质上与其它邮件并无区别,只要被Gmail收入收件箱,那就是需要阅读的对象,至于阅读结果的评判与应用无关。

2、应用的目的是提醒,告知有未读存在,至于该不该读、什么时候读是用户的选择,让阅读邮件由主动阅读变为事件驱动式阅读。

3、服务器和手机谁更安全,是因人而异因地而异,不是你觉得x、我觉得y的问题。

4、我们玩的是高级定制,你要想玩139服务没有任何问题,这只是喜好取向不同。

第1,2附言也都有说明。

还有,在你没有完全理解应用需求和场景的时候,请你小心的使用诸如“蛋疼”这样的词汇。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/134224

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX