Spring is here, and so is the 3.5 release (codename sunny) of the Halon SMTP software! It includes major features such as an IDE-style script editor and object orientation, is based on FreeBSD 10.3 and comes with the latest quarterly packages. In other words, this release marks another milestone for Halon’s developer friendliness.

Noting that most of our high-profile customers uses scripting exclusively (in contrast to graphical flow chart blocks) and halonctl to configure their system, we’ve added a script editor (based on Ace and w2ui) inspired by the integrated development environment (IDE) concept. It streamlines the entire workflow by allowing you to work on multiple files, test the code you’re writing in a REPL interpreter with a pre/post-amble environment, global code search, and much more.

Another feature related to scripting is the object and this keywords, which brings object orientation to our scripting language. It’s based on closures (introduced in 3.4-r4) and is the basis for recent additions such as the MIME object. Speaking of which, the standard library’s MIME object now has send() and toString() methods which can be used to generate email (customised bounces, for example), and the DATA context’s MIME object a getBody() method. The scripting language has also received a couple of new convenience features such as destructuring assignment, null coalescing operator and include_once, which you can see examples of below. It allows you to write cleaner and clearer code, more quickly.

$x = object [ "self" => function() { return this; }]; // object orientation
[$error, $code] = some_protocol($query);              // destructuring assignment
$var = $data["settings"] ?? "default value";          // null coalescing operator

Finally, we’ve added HAProxy protocol support in addition to XCLIENT, and uses Postfix 3.0.3’s default TLS setting which is to disable SSLv3.

New systems are deployed by downloading a disk image or virtual machine template, and existing systems are updated by simply pressing the web admin’s update button.