shell 获取邮件

2020年3月10日 0 条评论 321 次阅读 0 人点赞

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:

这个方法很复杂,搞了几个小时才搞通一个比较方便的流程:

  1. 使用 Fetchmail 获取邮件,使用 Procmail 保存邮件

  2. 这个步骤网上教程很多,能实现获取、保存、查看内容等,但是无法导出为可阅读内容,只能命令行交互查看(也许有办法,但是搜了全网资料很少)

  3. 转换邮件编码为可读信息

  4. 网上用的很多的方式都是: mutt 结合 w3m 获取可读邮件内容。但是基本上都是交互式查看,仔仔细细看了 w3m 的所有参数也不知道怎么把原始邮件内容转成可读格式, mutt 使用 w3m 查看的方式我猜吧估计是这个 copiousoutput ,但是不知道 w3m 怎么使用直接dump出可读的。于是对比邮件内容头部的内容:

    Content-Type: text/html; charset="UTF-8"

    Content-Transfer-Encoding: quoted-printable

    Content-Type charsetw3m 里面都有涉及,找了很久没找到资料,于是直接转向 解码  quoted-printable 。这个就好找多了,直接使用了 python 的模块 quopri python 真香!

  5. html转text 

  6. 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 

Sevenfal

这个人太懒什么东西都没留下

文章评论(0)