驯服QMail

我运行自己的电子邮件服务器。 它使用QMail。 我意识到那里至少存在两个问题-自从永远以来,所有很酷的孩子一直在使用Gmail收发电子邮件,到底是谁在使用QMail?

像大多数情况一样,出于历史原因也是这样。 而且,当然,我很想改变当前的状况,但是它在大多数情况下都能很好地起作用,以至于偶尔给我带来的痛苦不值得更改设置。

所以我在那里。 世界上大约三个仍在使用QMail运行电子邮件服务器的人中的一个。 这偶尔会给我带来麻烦。

一个问题是邮件队列的管理。 QMail为您提供的用于检查队列内容并删除任何不必要的消息的工具相当原始。 似乎每个人都使用第三方工具。 几年前,我安装了一个WordPress安装程序,该安装程序已被盗用,用于向随机人群发送数千封电子邮件。 传出队列中充满了垃圾邮件,传入队列中充满了退回邮件。 我停止了QMail,并开始寻找在保留少量合法邮件的同时彻底删除所有不良邮件的方法。

我发现了一个名为qmHandle的程序,它确实可以实现我想要的功能。 它使我能够从符合各种条件的两个队列中删除消息,不久之后,我又重新上班了(还清理了WordPress安装并加强了其安全性)。

qmHandle程序是用Perl编写的。 而且,我总会想到,在某个时候,我会重新访问该程序,并通过修复或以某种方式对其进行改进来提供一些回报。 几个月前,我有时间这样做。

我从看代码开始。 并意识到编写它几乎是很难维护的。 好的,那可能不是真的,但是它的写法并不是很容易理解。 原始作者Michele Beltrame创作的作品确实很有用,但在我看来,他为自己做了很多困难,比他所需要的要困难得多。

所以我找到了我的项目。 我想破解qmHandle。 但是在我能够做到这一点之前,我需要重写它,以便更轻松地进行工作。 在接下来的几周中,我很快就会想到这一点。 新版本在Github上。 我从导入原始版本开始,因此读取提交历史记录以跟踪所做的更改很有趣。 我认为我在三个方面进行了改进。

  • 将大多数逻辑拆分为一个模块。 我说“最多”,但实际上就是全部。 现在,命令行程序非常简单:
  QMail :: QueueHandler->新建->运行 
  • 改进(我主要是指简化)逻辑和语法。 我移动了一些变量声明(因此它们的作用域较小),并重命名了一些变量声明,以便其含义更明显。 哦,我添加了几个有用的CPAN模块-Term :: ANSIColor和Getopt :: Std。
  • 使用驼鹿。 总的来说,转向面向对象的方法是一个巨大的胜利,而Moose使这比以前容易得多。 由于性能原因,将来我可能会考虑从Moose迁移到Moo。

几周以来,我一直在电子邮件服务器上使用修订版,它的工作方式似乎与原始版本几乎相同。 因此,是时候将其放宽到更广阔的世界了。 今天下午,我将其发布给CPAN。 上面我已经说过,使用QMail处理电子邮件的人数很少。 但是,如果您属于该组,并且想要一种更强大的方法来管理邮件队列,那么新版本的qmHandle可能对您很有用。

我知道我需要做一些事情。

  1. 更多测试。 将大多数代码移入一个模块的主要目的是使测试更加容易。 现在是时候证明这一点。 当前的测试套件很小。 我需要改进。
  2. 组态。 当前,所有配置都是硬编码的。 而且不同的系统很可能需要不同的配置(例如,队列可能存储在不同的目录中)。 需要有一种简单的方法来配置它。
  3. 错误修复和改进。 毕竟,这就是为什么我开始这样做。 我不知道这些可能是什么,但是我确定有一些方法可以改善程序。

我希望至少有人觉得这有用。