shell获取邮件内容。没想到异常的艰辛终于完成了这个操作。
需求:获取gmail中邮件内容中接受到的验证码。
方法1:
从gmail的订阅地址 https://mail.google.com/mail/feed/atom 获取。(缺陷:部分新邮件无法获取到,疑似邮件标题相同则无法获取,或者是转发的邮件?)
请注意在 https://myaccount.google.com/lesssecureapps 中开启允许 安全性较低的应用的访问权限 ,部分服务器仍然无法获取上方链接的内容,返回401认证失败(没有解决)。
curl -s 'https://mail.google.com/mail/feed/atom'\ -u "${name}:${pass}" |\ tr -d '\n' |\ sed 's:</entry>:\n:g' |\ sed -n 's/.*<title>\(.*\)<\/title><summary>\(.*\)<\/summary>.*<author><name>\([^<]*\)<\/name><email>\([^<]*\).*/\3|\4|\1\2\n/p'
第二行是邮箱账号和密码
最后一行是获取邮件标题、内容、发件方姓名、邮件地址,以 发件方姓名|邮件地址|邮件标题|内容 的形式打印出来,如需自己格式,修改 \1\2\3\4 位置和分隔符即可。
方法2:
这个方法很复杂,搞了几个小时才搞通一个比较方便的流程:
-
使用 Fetchmail 获取邮件,使用 Procmail 保存邮件
-
转换邮件编码为可读信息
-
html转text
这个步骤网上教程很多,能实现获取、保存、查看内容等,但是无法导出为可阅读内容,只能命令行交互查看(也许有办法,但是搜了全网资料很少)
网上用的很多的方式都是: mutt 结合 w3m 获取可读邮件内容。但是基本上都是交互式查看,仔仔细细看了 w3m 的所有参数也不知道怎么把原始邮件内容转成可读格式, mutt 使用 w3m 查看的方式我猜吧估计是这个 copiousoutput ,但是不知道 w3m 怎么使用直接dump出可读的。于是对比邮件内容头部的内容:
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Content-Type 和 charset 在 w3m 里面都有涉及,找了很久没找到资料,于是直接转向 解码 quoted-printable 。这个就好找多了,直接使用了 python 的模块 quopri ,python 真香!
sed 获取了邮件正文内容
sed -n 's/<div>\(.*\)<\/div>/\1/p'
经过转换可读之后仍然是 html 代码,还是转成 text 方便获取邮件信息好点,这里直接用 sed 将所有html代码替换为空格之后,把所有连续空格替换为一个空格,就搞定了。
sed -e 's/<[^>]*>/ /g' | sed 's/\s\+/ /g'
至此,邮件内容就导出完成。
参考1:接受&保存邮件 https://segmentfault.com/a/1190000018131615
参考2:转换邮件编码为可读信息 https://gist.github.com/jjarmoc/1571540#gistcomment-2572257
参考3:html转text https://stackoverflow.com/questions/12422289/bash-command-to-convert-html-page-to-a-text-file#answer-12423197
参考4:多余空格去除 https://blog.csdn.net/tterminator/article/details/52792959
文章评论(0)