• Stars
    star
    5,018
  • Rank 8,312 (Top 0.2 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 13 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A fast, highly extensible, and event driven SMTP server

Haraka - a Node.js Mail Server

Tests Coverage 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 asynchronous 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 Postfix/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 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 [email protected], and yet still have it correctly routed to [email protected]. 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:

# 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 [email protected], 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/haraka/Haraka.git
$ cd Haraka

Install Haraka's node.js dependencies locally:

$ npm install

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.

More Repositories

1

haraka.github.io

Haraka Web Site
Vue
55
star
2

node-address-rfc2822

Parser for RFC2822 (Header) format email addresses
JavaScript
48
star
3

node-address-rfc2821

RFC2821 Email Address parser (from Haraka)
JavaScript
13
star
4

haraka-plugin-watch

Watch live SMTP traffic in a web interface.
JavaScript
13
star
5

haraka-config

Haraka config file loader and parser
JavaScript
10
star
6

haraka-tld

Haraka TLD utilities
JavaScript
7
star
7

haraka-plugin-limit

Enforce many types of limits on a Haraka mail server.
JavaScript
7
star
8

haraka-nosql

NoSQL for Haraka, with RAM, SSC, and Redis backends
JavaScript
7
star
9

haraka-plugin-vmta

Haraka Virtual MTA
JavaScript
6
star
10

haraka-plugin-karma

Karma plugin - A heuristics based reputation engine for the Haraka MTA
JavaScript
6
star
11

haraka-plugin-dovecot

Haraka mail plugin that checks whether a mailbox exists (Dovecot auth-master) and the SMTP-Auth per Dovecot (auth service is also used by Postfix) allowed.
JavaScript
6
star
12

haraka-dsn

Delivery Status Notifications
JavaScript
5
star
13

haraka-plugin-auth-imap

Provide SMTP AUTH against IMAP servers
JavaScript
4
star
14

haraka-utils

Haraka's general purpose utilities
JavaScript
4
star
15

haraka-plugin-redis

redis support for Haraka plugins
JavaScript
3
star
16

haraka-plugin-recipient-routes

Perform recipient validation and MX routing based on recipient domain or address
JavaScript
3
star
17

haraka-plugin-elasticsearch

Ship Haraka log info directly to Elasticsearch
JavaScript
3
star
18

haraka-plugin-p0f

TCP Fingerprinting of email senders.
JavaScript
3
star
19

haraka-plugin-rcpt-postgresql

Haraka plugin that validates recipients against a PostgreSQL database.
JavaScript
3
star
20

haraka-plugin-geoip

provide geographic information about mail senders
JavaScript
3
star
21

haraka-plugin-known-senders

Maintain counters (per domain) of messages you send and receive email to.
JavaScript
2
star
22

haraka-plugin-milter

A haraka plugin to support milter
JavaScript
2
star
23

test-fixtures

Fixtures for testing Haraka and plugins
JavaScript
2
star
24

haraka-plugin-syslog

Haraka plugin that logs via syslog
JavaScript
2
star
25

haraka-net-utils

haraka network utilities
JavaScript
2
star
26

haraka-plugin-outbound-rate-limit

DEPRECATED
JavaScript
2
star
27

haraka-plugin-dmarc-perl

Haraka plugin that uses Mail::DMARC via it's HTTP service
JavaScript
2
star
28

haraka-plugin-auth-ldap

Authenticate SMTP clients against LDAP
JavaScript
1
star
29

haraka-plugin-dcc

DCC plugin for Haraka
JavaScript
1
star
30

haraka-plugin-access

Access Control Lists for Haraka
JavaScript
1
star
31

haraka-eslint

eslint rules for Haraka projects
JavaScript
1
star
32

haraka-plugin-attachment

Haraka Plugin for Attachment Filtering
JavaScript
1
star
33

haraka-plugin-aliases

Email aliases for Haraka
JavaScript
1
star
34

haraka-plugin-uribl

URIBL plugin for Haraka
JavaScript
1
star
35

haraka-plugin-log-reader

extracts matching log entries from haraka log files
JavaScript
1
star
36

haraka-plugin-asn

look up ASN from local database and/or remote lookup services
JavaScript
1
star
37

haraka-plugin-rcpt-ldap

Validates recipients against an LDAP server
JavaScript
1
star
38

haraka-results

Results storage for Haraka connections & transactions
JavaScript
1
star
39

haraka-plugin-graph

Haraka Graph plugin
JavaScript
1
star