5.5 从命令行访问Gmail
Gmail(http://mail.google.com)是Google被广泛使用的一项免费电子邮件服务。你可以使用经过认证的RSS feed来读取个人邮件。我们也能够通过发送人姓名以及邮件主题来解析RSS feed。这使得我们无须打开网页浏览器就能够查看收件箱中的未读邮件。
5.5.1 实战演练
来看下面这个脚本文件,它的作用是通过解析Gmail的RSS feed来显示未读的邮件:
#!/bin/bash
文件名: fetch_gmail.sh
#用途:获取 Gmail 工具
username="PUT_USERNAME_HERE"
password="PUT_PASSWORD_HERE"
SHOW_COUNT=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 ))
输出如下:
- $ ./fetch_gmail.sh
- Author: SLYNUX [ slynux@slynux.com ]
- Subject: Book release - 2
- Author: SLYNUX [ slynux@slynux.com ]
- Subject: Book release - 1
- .
- ……共5封未读邮件
5.5.2 工作原理
这个脚本通过用户认证使用cURL来下载RSS feed。用户认证信息由-u username: password
参数提供。也可以只使用-u user
,这样就不用再提供密码。然后由cURL在运行时以交互的方式索求密码。
我们将管道命令拆分成不同的部分来解释这个脚本的工作原理。
tr -d '\n'
移除了所有的换行符,这样我们就可以将\n
作为定界符来重建邮件项。sed 's::\n:g'
将每一处 替换成换行符,以保证每一条邮件项各自单独为行,从而就能够逐条解析邮件。通过查看https://mail.google.com/mail/feed/atom页面源代码中用于RSS feed的XML标记,我们可以看出每一条邮件项都对应着
。
该脚本接下来的部分如下:
sed 's/.*<title>\(.*\)<\/title.*<author><name>\([^<]*\)<\/
name><email>
\([^<]*\).*/Author: \2 [\3] \nSubject: \1\n/'
脚本用匹配邮件标题,用
匹配发件人姓名,
匹配发件人电子邮件地址。接下来,按照下面的方法使用反向引用。
Author: \2 [\3] \nSubject: \1\n
用来将匹配内容以易于阅读的格式来替换原先的邮件项。\1
对应于第一处匹配,\2
对应于第二处匹配,依次类推。SHOW_COUNT=5
用来设置需要在终端中显示的未读邮件数量。head
用来显示SHOW_COUNT*3
行文本1。SHOW_COUNT
乘以3是因为每一封未读邮件的相关信息需要占用3行。
1 这里的SHOW_COUNT*3
行文本并不包括脚本开始部分由echo
生成的那一行(空行)。
5.5.3 参考
5.4节讲解了
curl
命令。4.6节讲解了
sed
命令。