曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3987|回复: 0
打印 上一主题 下一主题

读取 gmail 未读邮件

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2012-2-22 20:14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面这个脚本用来读取 gmail 中的未读邮件,默认输出头 5 封未读邮件,每一封未读邮件以下列行书输出:
Author: Amazon.cn [eweekly@amazon.cn]
Subject: (AD)家居家电大清仓1折起,宿舍用品特惠总动员,考试参考书底价登场。

脚本代码如下:
[Bash shell] 纯文本查看 复制代码
#!/bin/bash


username="你的GMAIL用户名"
password='你的GMAIL密码'
SHOW_COUNT=5 #输出头 5 封未读邮件
echo
curl-u $username:$password --silent "https://mail.google.com/mail/feed/atom" | \
tr -d '\n' | sed 's:</entry>:\n:g' | \
sed 's/.*<title>\(.*\)<\/title.*<author><name>\([^<]*\)<\/name><email>\([^<]*\).*/Author: \2 [\3] \nSubject: \1\n/' | \
head -n $(( $SHOW_COUNT * 3 ))

该程序主要对 GMAIL 的 RSS 进行解析,该 RSS feeds 地址是:https://mail.google.com/mail/feed/atom

如果使用浏览器登录,那么会看到下面的界面:


脚本代码正是对上面的页面进行解析与替换:

在代码中,首先用 curl登录系统,然后对页面输出流进行解析。首先 tr -d '\n'紀令是去掉所有的换行符,这样做之后,所有的行都会连到一起。

接着,使用 sed 's:</entry>:\n:g'紀令将所有的 </entry> 标签换成换行符,这样做的目的是以原来每个 </entry> 标签处做一个段落,实际就是一个行,这个行中当然也包含了所有每一封未读邮件的发件人姓名,发件人地址,以及邮件标题等信息。

sed 's/.*<title>\(.*\)<\/title.*<author><name>\([^<]*\)<\/name><email>\([^<]*\).*/Author: \2 [\3] \nSubject: \1\n/' | head -n $(( $SHOW_COUNT * 3 ))
这一段是一个相当长的替换,需要比较网页源码内容才可以更好的理解。其中 \1, \2, \3 分别依次对应着 3 个小括号的正则匹配。SHOW_COUNT * 3 的值在此为 15 ,这是因为在我们的输出格式中,一个完整的未读邮件信息段落占据 3 行,比如下面的输出:
[beyes@beyes gmail]$ sh getmail.sh

Author: Google+ 小组 [noreply-daa26fef@plus.google.com]
Subject: 开始使用 Google+

Author: Amazon.cn [eweekly@amazon.cn]
Subject: (AD)家居家电大清仓1折起,宿舍用品特惠总动员,考试参考书底价登场。

Author: Amazon.cn [eweekly@amazon.cn]
Subject: (AD)学生生活用品促销季!家居冬季品清仓1.5折!容声迷你洗衣机279元!42寸全能LED直降900元!

Author: GoDaddy.com [offers@godaddy.com]
Subject: What's not to love?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-15 21:54 , Processed in 0.063328 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表