Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
An event driven SMTP server

Merge pull request #866 from msimerson/config-plugins-docs

add additional documentation in config/plugins
latest commit 9a44745b04
Matt Simerson msimerson authored
Failed to load latest commit information.
bin tell haraka about docs/deprecated
cfreader add 'value' type to flat.empty
config add additional documentation in config/plugins
contrib replace perl GeoIP db fetcher with node.js version
docs Improve plugin documentation
plugins rename net_utils.is_rfc1918 -> is_private_ip
tests rename net_utils.is_rfc1918 -> is_private_ip
.gitignore ignore vim file.name~ backup files
.gitmodules working on packaging change.
.jshintrc replace infile jshint with .jshintrc
.travis.yml * add Windows build status badge
Changes Date on Changes
Dockerfile Switch to Phusion baseimage instead of stock Ubuntu
LICENSE LICENSE and TODO files
README.md added missing ] in AppVeyor badge
TODO TODO: added HARAKA_NETWORK_TESTS item
UPGRADE add deprecated notice within legacy plugins
address.js Reconstruct Address objects without parsing
appveyor.yml * add Windows build status badge
attachment_stream.js Store attachment headers on stream
chunkemitter.js Support node v0.6 by adding in Buffer.concat
config.js * line shortening (lint)
configfile.js Merge pull request #823 from msimerson/plugins
connection.js connection: lint updates
constants.js Improve logging of plugins and common plugin errors
dkim.js Node 0.11.x compatibility fixes
dsn.js Change all 'instanceof Array' to 'Array.isArray(foo)'
fsync_writestream.js Address v0.10 compatibility
haraka.js Add support for .yaml and allow .json and .yaml files to override oth…
haraka.sh Switch to Phusion baseimage instead of stock Ubuntu
line_socket.js smtp_forward.md: reference issue #573
logger.js fix adding timestamps to log messages
mailbody.js Don't capture multi-part body text
mailheader.js Prevent plugins adding empty headers
messagestream.js Add missing return to allow pipe()'s to be chained together per #791
net_utils.js rename net_utils.is_rfc1918 -> is_private_ip
outbound.js outbound: wrap long lines
package.json Bump version
plugins.js Merge pull request #823 from msimerson/plugins
result_store.js replaced util.isArray with Array.isArray
rfc1869.js Finally fix RCPT parsing
run_tests cfreader/binary, flat, ini, json, yaml
server.js server: corrected defaults applying
smtp_client.js smtp_forward: add additional check for domain
spf.js Node 0.11.x compatibility fixes
timer_queue.js Major fixes to all aspects of outbound
tls_socket.js Kill off SSLv3 because of the POODLE attack
transaction.js Let Txn.attach_hooks play nicely with other methods
utils.js utils: added .extend(), copy props onto objects

README.md

Haraka - a Node.js Mail Server

Build Status Coverage Status Windows Status

Haraka is a highly scalable node.js 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 asyncronous JS and are very fast.

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

Haraka makes no attempt to be a mail store (like Exchange or Postix/Exim/Qmail), a LDA, 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

Screencast

Getting started with Haraka

Why Use Haraka?

Haraka's plugin architecure 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, validating HELO names, checking DNS Blocklists, and many others.

Installing Haraka

Haraka requires node.js to run. Install Haraka with npm:

npm install -g Haraka

After installion, 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 configured. After editing config/plugins, restart Haraka and enjoy!

Running from git

If you are unable to use npm to install Haraka, you can run from git by following these steps:

First clone the repository:

$ git clone https://github.com/baudehlo/Haraka.git
$ cd Haraka

Edit config/plugins and config/smtp.ini to specify the plugins and config you want.

Finally run Haraka:

$ node haraka.js

License and Author

Haraka is MIT licensed - see the LICENSE file for details.

Haraka is a project started by Matt Sergeant, a 10 year veteran of the email and anti-spam world. Previous projects have been the project leader for SpamAssassin and a hacker on Qpsmtpd.

Something went wrong with that request. Please try again.