曲径通幽论坛

标题: 读取 gmail 未读邮件 [打印本页]

作者: beyes    时间: 2012-2-22 20:14
标题: 读取 gmail 未读邮件
下面这个脚本用来读取 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

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

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

在代码中,首先用 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?





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2