借助群晖实现邮件信息的自动提取

从电子邮件中自动提取信息是一个比较普遍的需求。如有多张信用卡,从邮箱读取账单并在还款日前提醒是一个比较常见的需求。一种解决方案是把邮箱账户和密码交给或大或小的商业公司,由他们代查并提醒。但是,这需要非常信任这些公司的操守。

通常而言,直接处理个人邮箱中的内容非常困难。搭建私有邮件服务器,根据主题或发件人对收到的邮件进行筛选,然后转发到私有邮件服务器,再在私有服务器上利用脚本读取并提取邮件中的信息是另一种解决方案。

一些云主机服务商(如著名的阿里云),担心用户搭建的私有邮件服务器滥发垃圾邮件,导致域名被主流邮件服务商加到黑名单,经常会封禁邮件服务涉及的25端口。还好群晖自带一个邮件服务套件(Synology MailPlus Server),可以借以实现所需功能。

Synology MailPlus Server的安装和配置比较简单,按部就班操作就行。整个过程唯一需要注意的是似乎需要一个域名(不用是否可行我没研究过)。域名申请和动态解析是另一个话题了,不在此详述。

群晖上的邮件都存放在主盘符的MailPlus/@local中。这个目录下每个四位数的目录对应一个邮件账户,其中“0000”和“1024”可能是系统保留或模板,不用理会。对比找到账户对应的目录,假如某账户对应的数字是1028,那么收件箱对应的详细目录可能是 ‘…/MailPlus/@local/1028/1028/Maildir/cur’。

收件箱目录下每一个文件对应一封邮件。每一个文件名都较长,前10位数字代表收到时刻对应的Unix时间,邮件内容采用了标准的编码方式,并没有加密保存。通常邮件内容是html格式的富文本。因此,可以通过脚本解码并识别邮件的内容。

可惜的是,群晖自带的脚本运行触发器没有收到邮件事件判断。只能变通地设置定时任务,在每天指定时间利用脚本程序对增量邮件进行解码,根据邮件主题或内容筛选符合要求的邮件,再利用正则匹配方式抓取邮件中的信息。 如果后续还需要自动提醒,把这些信息内容保存下来,另外设定时任务读取内容并发送提醒就行了。