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

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

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

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

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

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

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

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

使用vsmeta文件更新群晖Video Station视频信息

从网上抓取了一些视频放在家里群晖218+上,但由于这些视频不是标准影片,群晖不能自动识别视频信息,在Video Station只显示文件名,不能按照系列分类。

手动编辑了一个文件的信息,群晖自动保存了一个视频文件全名+.vsmeta的文件。文本编辑器打开文件发现是乱码。幸好github上搜到了一个相关的项目。看了一遍代码,尽管似乎也是半成品,大致还是明白了.vsmeta文件的格式。

总结起来,群晖.vsmeta文件是一个二级制文件,由一系列的标识(TAG)和对应内容(整数、浮点数、字符串或标识组)组成,分为五部分信息:

  1. 文件头(0x080x02)
  2. 通用信息
    • 节目标题(TAG_SHOW_TITLE = 0x12)
    • 节目标题2(TAG_SHOW_TITLE2 = 0x1A)
    • 剧集标题(TAG_EPISODE_TITLE = 0x22)
    • 剧集年(TAG_YEAR = 0x28)
    • 剧集发布日期(TAG_EPISODE_RELEASE_DATE = 0x32)
    • 剧集信息锁定(TAG_EPISODE_LOCKED = 0x38)
    • 章节小结(TAG_CHAPTER_SUMMARY = 0x42)
    • 剧集信息(TAG_EPISODE_META_JSON = 0x4A)
    • 分类(TAG_CLASSIFICATION = 0x5A)
    • 评分(TAG_RATING = 0x60)
    • 剧集数据(TAG_EPISODE_THUMB_DATA = 0x8A)
    • 剧集文件MD5(TAG_EPISODE_THUMB_MD5 = 0x92)
  3. 第一组(TAG_GROUP1 = 0x52)
    • 演员(TAG1_CAST = 0x0A)
    • 导演(TAG1_DIRECTOR = 0x12)
    • 类型(TAG1_GENRE = 0x1A)
    • 编剧(TAG1_WRITER = 0x22)
  4. 第二组(TAG_GROUP2 = 0x9A)
    • 季(TAG2_SEASON = 0x08)
    • 集(TAG2_EPISODE = 0x10)
    • 季发布年(TAG2_TV_SHOW_YEAR = 0x18)
    • 季发布日期(TAG2_RELEASE_DATE_TV_SHOW = 0x22)
    • 季信息锁定(TAG2_LOCKED = 0x28)
    • TAG2_TVSHOW_SUMMARY = 0x32
    • TAG2_POSTER_DATA = 0x3A
    • TAG2_POSTER_MD5 = 0x42
    • TAG2_TVSHOW_META_JSON = 0x4A
  5. 第三组 TAG2_GROUP3 = 0x52
    • TAG3_BACKDROP_DATA = 0x0A
    • TAG3_BACKDROP_MD5 = 0x12
    • TAG3_TIMESTAMP = 0x18

用python照着造了一个轮子,在218+抓取视频的定时任务后加入了创建对应.vsmeta文件的py脚本,果然自动更新文件信息了,Video Station的目录终于整齐有序了。