V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
spance
V2EX  ›  分享创造

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

  •  
  •   spance · 2014-09-18 13:38:25 +08:00 · 8858 次点击
    这是一个创建于 3519 天前的主题,其中的信息可能已经有所发展或是发生改变。
    何时应该检查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](https://i.imgur.com/43WOaBe.png)

    # 关于隐私和安全性

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

    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](https://i.imgur.com/5QM6vlc.png)
    ![g_api_2](https://i.imgur.com/rHUBFmU.png)

    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](https://i.imgur.com/LrvpQqS.png)

    4、账户授权

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

    ![setup](https://i.imgur.com/R0P8dbn.png)

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

    *注: 目前大陆是无法访问到Google Api的,因此不要在国内服务器上部署。
    第 1 条附言  ·  2014-09-18 15:55:35 +08:00
    这次是为了更好的保密性、更爽的自定义通知、更屌丝的快感而起的,想带给大家另一个思路另一个方法,看到有人使用代收的方案,我不太建议这么做,这丧失了gmail的私密性,需要向代收方公开gmail密码。

    如果你不能持续翻墙在线含手机、如果你需要更及时的掌握新邮件、如果你需要更爽一点的新邮件通知方式,那么你应该试试这个方案。

    这种方式是需要一些银子的(短信接口),但是如果这种方式能让你得到快感,短信那点钱也就不是问题,我也就很满足了。

    欢迎大家多给意见、多发pull.
    第 2 条附言  ·  2014-09-19 10:27:34 +08:00
    # 适用场景

    - 不想公开Gmail密码给第三方的
    - 不能/不便持续Gmail在线的
    - 不想使用邮件客户端残留邮件副本
    - 想要更及时的通知
    - 想要更爽的自定义通知
    - 想要更安全、更具隐私性的方式

    本方案就是考虑上面的场景需求,做专业的私人定制。
    50 条回复    2014-09-19 14:28:06 +08:00
    princeofwales
        1
    princeofwales  
       2014-09-18 13:40:38 +08:00   ❤️ 1
    chrome上有扩展
    android上有官方app
    新邮件都会及时提醒啊
    很多时间app比chrome还要快
    wzxjohn
        2
    wzxjohn  
       2014-09-18 13:42:40 +08:00
    @princeofwales 实际上墙内人民装啥App都没用。。。
    jsonline
        3
    jsonline  
       2014-09-18 13:42:45 +08:00 via Android
    邮件客户端啊。。。。
    surftheair
        4
    surftheair  
       2014-09-18 13:43:28 +08:00
    电脑上用网页版,移动设备上用mailbox app,推送即时。sms就算了,不然手机要炸了
    spance
        5
    spance  
    OP
       2014-09-18 13:43:48 +08:00
    @princeofwales
    chrome扩展需要chrome一直挂代理一直开着,android app需要android挂代理。
    如果需要更方便的,那就试试这个把。
    20150517
        6
    20150517  
       2014-09-18 13:49:20 +08:00 via Android
    ip装个gmail应用或者安卓手机不都有gmail提醒吗?
    surftheair
        7
    surftheair  
       2014-09-18 13:49:47 +08:00
    @spance 我想说的是,在镇内既然在用gmail的肯定都是有翻墙方法的。 短信提示你有几封未读邮件真的没什么用途啊,建议探索一下其他的用途
    20150517
        8
    20150517  
       2014-09-18 13:50:06 +08:00 via Android
    @spance 代理装在网关上啊
    xjx0524
        10
    xjx0524  
       2014-09-18 13:54:02 +08:00
    我用qq邮箱设置了收取gmail邮件,然后微信又会有邮件提醒,基本上够用了
    spance
        11
    spance  
    OP
       2014-09-18 13:58:49 +08:00
    @surftheair
    @20150517
    @66beta
    我知道有google有扩展、有代理,都很好,我也在用。在不长时间开代理、经常转换电脑、或者时常不在电脑旁,等等,要怎么办。
    我只是寻找一个新邮件到达时最省事最方便的途径,我只是想知道现在有未读邮件,至于什么时候读、用什么方式读,那就是后话了,要看当时有没有时间有没有心情。
    spance
        12
    spance  
    OP
       2014-09-18 14:01:41 +08:00
    @xjx0524
    事实上转发到139邮箱也有短信,但是这么一来对139对qq就透明了,丢失了gmail的意义了。
    而且作为节操控定制控,希望给自己的提醒短信,自己可以定制,其实很简单,就是为了让自己爽而已。
    MinonHeart
        13
    MinonHeart  
       2014-09-18 14:04:39 +08:00 via Android
    测试了一下,QQ邮箱发到Gmail后,手机Gmail在12分钟后收到了邮件,自动提醒,不需要特殊姿势。不过楼主这也不错,赞个
    JoyNeop
        14
    JoyNeop  
       2014-09-18 14:04:52 +08:00 via iPhone
    IMAP/POP3 怒刷存在感……
    no13bus
        15
    no13bus  
       2014-09-18 14:06:51 +08:00
    @spance 短信接口你是怎么做的?
    spance
        16
    spance  
    OP
       2014-09-18 14:07:55 +08:00
    @JoyNeop 你体力真好,赞一个!
    spance
        17
    spance  
    OP
       2014-09-18 14:11:09 +08:00
    @no13bus 我不提供短信接口,我也没写推荐的短信商,否则要被说打广告了。
    你可以自己搜索,国内发短信的也很多,国外的也有更多。国内商发国内,大概1毛钱,国外商法国内,大概3-4毛钱。一个月发个几百条也没几个钱的,只要觉得爽花个几块钱也是值得的。
    smileawei
        18
    smileawei  
       2014-09-18 14:17:18 +08:00
    ios的官方邮件客户端是可以正常收发Gmail的
    no13bus
        19
    no13bus  
       2014-09-18 14:17:29 +08:00
    @spance nice.知道了。pullbullet也不错
    spance
        20
    spance  
    OP
       2014-09-18 14:26:30 +08:00
    @smileawei 是的,只要是pop3/imap的邮件客户端,都可以收到邮件。
    iOS上Mail是可以跑后台的,但是他的检查周期比较长,而且要占存储,所以我就搞了这个比较省事而且可以比较爽的办法。
    GhostFlying
        21
    GhostFlying  
       2014-09-18 15:05:31 +08:00
    = = 全天翻墙的表示直接看Chrome/Android 推送就好了
    spance
        22
    spance  
    OP
       2014-09-18 15:09:10 +08:00
    @GhostFlying 也不错。当然能24小时持续代理的且不离开电脑的人毕竟还是不多的。
    qq2511296
        23
    qq2511296  
       2014-09-18 15:32:48 +08:00
    qq邮箱代收GMail表示无压力
    spance
        24
    spance  
    OP
       2014-09-18 15:41:05 +08:00
    @qq2511296 代收很省事,但你需要告诉腾讯你的密码。如果你想要更高的安全性,更爽的自定义通知,那是试试这个吧。
    krafttuc
        25
    krafttuc  
       2014-09-18 15:59:58 +08:00
    轮询的速度不如 IMAP IDLE 吧。而且防火墙目前还没有对 Gmail IMAP 接口动手。
    Tink
        26
    Tink  
       2014-09-18 16:00:45 +08:00 via iPhone
    这邮件少的话还行,100-200封的,那你手机受得了吗?
    spance
        27
    spance  
    OP
       2014-09-18 16:14:50 +08:00
    @Tink 一个时间段扫描一次,发送一个总数量,并不是一个未读就发送一个短信。现在是5分钟间隔,那么理论上一天最多是288条,如果有一直未读的,提醒过了就不再发了。
    spance
        28
    spance  
    OP
       2014-09-18 16:17:01 +08:00
    @Tink 轮询的速度是可以调节的。imap意味着要在非Google区域使用密码,imap也不是发短信。这个方案的目的是有快感的自定义的短信通知。
    Vanson
        29
    Vanson  
       2014-09-18 16:21:02 +08:00
    邮件客户端会不定时检查邮箱的新邮件
    lu18887
        30
    lu18887  
       2014-09-18 16:21:51 +08:00
    @wzxjohn apple 自带邮件客户端没问题
    egen
        31
    egen  
       2014-09-18 17:05:38 +08:00
    @wzxjohn accompli 值得一试
    hahastudio
        32
    hahastudio  
       2014-09-18 17:30:01 +08:00
    做出来这么个东西,感觉真的很厉害

    -虽然应该先想一想有没有用-
    我这边的情况是,手机上 GMail 能够拿到未读个数
    但是要看内容需要翻
    感觉跟你这个拿短信搞出来的效果差不多= =
    我好像是改过 hosts
    spance
        33
    spance  
    OP
       2014-09-18 17:51:04 +08:00
    @hahastudio 多谢。
    其实我的想法很简单,不想给手机倒腾代理,iOS也不好弄。而且不一定经常在有代理的电脑旁,等短信来了就在代理机上看看,顺便可以挂几个别人的账号也帮着提醒下。
    goodbest
        34
    goodbest  
       2014-09-18 18:15:06 +08:00
    虽然开发不容易,但是lz你可以试试ios上的gmail官方客户端啊...直接有推送的。
    myang
        35
    myang  
       2014-09-18 18:59:18 +08:00
    既然lz做这个的初衷是在不能持续翻墙的情况下及时知道有新邮件,问题是不能翻墙看邮件,你再及时知道有新邮件又有什么用处呢?不能点开看的通知是一点爽快感都不会有的啊……
    zhenghuiy
        36
    zhenghuiy  
       2014-09-18 19:27:32 +08:00
    网易邮箱/邮箱大师添加gmail,都有提醒啊。
    spance
        37
    spance  
    OP
       2014-09-18 19:46:36 +08:00
    @myang 提醒的初衷就是快速、安全、自定义,该通知的通知到,不该通知的就沉默。
    能不能看、什么时候看、要不要翻墙看那是用户的后续行为,与该应用无关了。

    @zhenghuiy 请看帖子下方的第一条附言。
    lifechan
        38
    lifechan  
       2014-09-18 21:27:10 +08:00
    我的手机都有提醒,还是wp系统。。。
    expkzb
        39
    expkzb  
       2014-09-18 21:52:10 +08:00 via iPhone
    ifttt
    sadaharu09
        40
    sadaharu09  
       2014-09-18 22:13:06 +08:00
    Windows 8上面有Mail,Mac OS上有Mail。
    mulog
        41
    mulog  
       2014-09-18 23:35:24 +08:00
    思路倒是不错 就是这需求好像太个性化了。。。
    jaylong
        42
    jaylong  
       2014-09-18 23:41:18 +08:00
    我会告诉你我早就把gmail收件自动转发到139邮箱然后收免费短信通知了吗?
    xcv58
        43
    xcv58  
       2014-09-19 01:27:54 +08:00
    感觉我用 Mailbox 的次数至少比短信多一个数量级。 不过这样不是更方便: http://cl.ly/image/2l3K46382N26
    YonionY
        44
    YonionY  
       2014-09-19 09:24:01 +08:00
    直接POP或IMAP不就得了,哪里需要这么麻烦
    chagel
        45
    chagel  
       2014-09-19 09:46:49 +08:00
    这个需求是有的,尤其是伟大的墙的存在,近来手动刷mail的频率显然变高

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

    @expkzb
    你很厉害,ifttt是我之前也发现的,但其黑箱操作不够放心,于是就自己写做成开源。
    欢迎试用,多提意见,多发pull
    chagel
        47
    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
        48
    hslx111  
       2014-09-19 11:47:33 +08:00
    感觉这样的需求不会很强烈,大多数人还是会用客户端的。
    YonionY
        49
    YonionY  
       2014-09-19 13:00:02 +08:00
    @spance 我很奇怪为什么会有这样奇怪的需求。新邮件知道强迫症?

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

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

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

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

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

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

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

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

    还有,在你没有完全理解应用需求和场景的时候,请你小心的使用诸如“蛋疼”这样的词汇。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5679 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 08:41 · PVG 16:41 · LAX 01:41 · JFK 04:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.