Introduction to Haraka
Haraka is a high performance SMTP server. It came out of Matt Sergeant's experience at MessageLabs/Symantec, building extremely high performance spam traps that had to process thousands of concurrent high latency connections.
Having worked on Qpsmtpd before, the basic design of a plugin system was taken from Qpsmtpd, and applied to a new Node.js mail server.
The original goal was to learn how to code in Node.js, but it turned into so much more.
A Growing User Base
Shortly after releasing the first few working versions, Haraka was noticed by Craigslist. They were looking to implement something similar, likely in C++, but also using an event loop architecture for scalability. Their current Postfix servers were not scaling well enough.
Craigslist extended Haraka and improved many of the core features and plugins. After rollout to their systems they de-commissioned around 50% of their hardware that was wasted by the difficult to extend Postfix system.
At the same time, other high end users, including British anti-spam systems developers FSL, began to notice Haraka.
With many commercial contributors, Haraka has grown into a very capable, stable and scalable mail server.
Once Haraka was fully capable of replacing anyone's inbound mail server (where mail arrives for them from the Internet, and where you have to implement the most stringent of Anti-Spam methods), it was time to add a scalable outbound mail sender to Haraka.
We spent many late nights putting together the outbound feature and making sure it was as scalable as the inbound service. Testing shows that it is several times faster than Postfix at sending email.
There's still work to do on outbound, but for most senders it will fit the bill perfectly.
In the future Haraka intends to add features to make the outbound system rival those of commercial large scale mail vendors such as Port 25 and Message Systems.
To do that we need to add a queue management system which scales transparently across clusters. Large receivers of email have specific requirements which are hard to adhere to when you have a cluster of hardware, such as how much mail they are willing to receive in a particular time window.