Grad shape
Grad shape

Haraka

Communication - Email - Mail Transfer Agents

About this project

Tests [![Coverage Status][cov-img]][cov-url]

Haraka is a highly scalable [node.js][1] email server with a modular plugin architecture. Haraka can serve thousands of concurrent connections and deliver thousands of messages per second. Haraka and plugins are written in asynchronous JS and are very fast.

Haraka has very good spam protection (see [plugins][4]) and works well as a filtering [MTA][3]. It also works well as a [MSA][5] running on port 587 with auth and [dkim_sign][6] plugins enabled.

Haraka makes no attempt to be a mail store (like Exchange or Postfix/Exim/Qmail), a [LDA][7], nor an IMAP server (like Dovecot or Courier). Haraka is typically used with such systems.

Haraka has a scalable outbound mail delivery engine built in. Mail marked as relaying (such as via an auth plugin) is automatically queued for outbound delivery.

Getting Help

  • [Join the mailing list][8] (implemented as a Haraka plugin)
  • [GitHub Issues][15]

Screencast

[Getting started with Haraka][2]

Why Use Haraka?

Haraka's plugin architecture provides an easily extensible MTA that complements traditional MTAs that excel at managing mail stores but do not have sufficient filtering.

The plugin system makes it easy to code new features. A typical example is providing qmail-like extended addresses to an Exchange system, whereby you could receive mail as user-anyword@domain.com, and yet still have it correctly routed to user@domain.com. This is a few lines of code in Haraka.

Plugins are provided for running mail through [SpamAssassin][9], validating [HELO][10] names, checking [DNS Blocklists][11], and [many others][12].

Installing Haraka

Haraka requires [node.js][1] to run. Install Haraka with [npm][2]:

# If the second command gives "nobody" errors, uncomment & run the next command
# npm -g config set user root
npm install -g Haraka

After installation, use the haraka binary to set up the service.

Running Haraka

First, create the service:

haraka -i /path/to/haraka_test

That creates the directory haraka_test with config and plugin directories within. It also sets the host name used by Haraka to the output of hostname.

If hostname is not correct, edit config/host_list. For example, to receive mail addressed to user@domain.com, add domain.com to the config/host_list file.

Finally, start Haraka using root permissions:

haraka -c /path/to/haraka_test

And it will run.

Configure Haraka

To choose which plugins run, edit config/plugins. Plugins control the overall behaviour of Haraka. By default, only messages to domains listed in config/host_list will be accepted and then delivered via the smtp-forward plugin. Configure the destination in config/smtp_forward.ini.

Read the Fine Manual

haraka -h plugins/$name

The docs detail how each plugin is configur

Technologies & License
MIT Node.js
Quick Deploy

Deploy this project to cloud platforms with one click