{"id":19542292,"url":"https://github.com/ruffrey/hk","last_synced_at":"2025-02-26T05:22:10.109Z","repository":{"id":5584085,"uuid":"6790226","full_name":"ruffrey/hk","owner":"ruffrey","description":null,"archived":false,"fork":false,"pushed_at":"2012-11-24T08:00:54.000Z","size":1024,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-08T18:50:11.561Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ruffrey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-11-21T05:05:18.000Z","updated_at":"2014-05-28T03:51:44.000Z","dependencies_parsed_at":"2022-09-04T20:21:01.022Z","dependency_job_id":null,"html_url":"https://github.com/ruffrey/hk","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruffrey%2Fhk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruffrey%2Fhk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruffrey%2Fhk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruffrey%2Fhk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruffrey","download_url":"https://codeload.github.com/ruffrey/hk/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240796091,"owners_count":19858950,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T03:14:03.427Z","updated_at":"2025-02-26T05:22:10.071Z","avatar_url":"https://github.com/ruffrey.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Haraka - a Node.js Mail Server\n------------------------------\n\nHaraka is an SMTP server which uses a plugin architecture to implement most\nof its functionality. It uses a highly scalable event model to be able to\ncope with thousands of concurrent connections. Plugins are written in\nJavascript using [Node.js][1], and as such perform extremely quickly. The\ncore Haraka framework is capable of processing thousands of messages per\nsecond on the right hardware.\n\nHaraka can be used either as an inbound SMTP server, and is designed with\ngood anti-spam protections in mind (see the `plugins` directory), or it can\nbe used as an outbound mail server - the most common way of doing this is by\nrunning it on port 587 with an \"auth\" plugin to authenticate your users.\n\nA full mail system for end users is vastly complicated, and so Haraka makes\nno attempt to be an IMAP server, figure out where mails should be delivered,\nor implement any of the functionality of a mail store. As such it is common\nto have a backend mail server which Haraka delivers to for that sort of\nfunctionality - Exchange, Postfix, Dovecot or Courier would be examples of\nsuch systems.\n\nHaraka does have a scalable outbound mail delivery engine built in. Any mail\nmarked as `relaying` (such as via an `auth` plugin) will automatically be\nqueued for outbound delivery.\n\n### Join the Mailing List\n\nTo get started with Haraka and ask questions about it, please join the\nmailing list: mailto:haraka-sub@harakamail.com - the mailing list is\nimplemented as a Haraka plugin.\n\n### Screencast\n\n[Getting started with Haraka][2]\n\n### Why Use Haraka?\n\nHaraka's primary purpose is to provide you with a much easier to extend\nmail server than most available SMTP servers out there such as Postfix,\nExim or Microsoft Exchange, yet while still running those systems for their\nexcellent ability to deliver mail to users.\n\nThe plugin system makes it trivial to code new features. A typical example\nmight be to provide qmail-like extended addresses to an Exchange system,\nwhereby you could receive mail as `user-anywordshere@domain.com`, and yet\nstill have it correctly routed to `user@domain.com`. This is a few lines of\ncode in Haraka, or maybe someone has already written this plugin.\n\nPlugins are already provided for running mail through SpamAssassin, checking\nfor known bad HELO patterns, checking DNS Blocklists, and watching for\nviolators of the SMTP protocol via the \"early_talker\" plugin.\n\nFurthermore Haraka comes with a simple plugin called \"graph\" which shows you\nreal-time charts of which plugins rejected the most mail, allowing you to\neasily fine-tune your list of plugins to more effectively stop spam.\n\n### Installing Haraka\n\nHaraka is written in Javascript and requires [node.js][1] to run.\n\nInstallation is very simple via [npm][2]:\n\n    $ npm install -g Haraka\n\nThat will provide you with a `haraka` binary which allows you to setup the\nservice.\n\n### Running Haraka\n\nSetting up Haraka is simple. Firstly we need to create the service:\n\n    $ haraka -i /path/to/haraka_test\n\nThat creates the directory `haraka_test` and creates `config` and `plugin`\ndirectories in there, and automatically sets the host name used by Haraka\nto the output of the `hostname` command.\n\nThis assumes that `hostname` gives you the correct host you want to receive\nmail for. If not, edit the `config/host_list` file. For example if you want\nto receive mail addressed to `user@domain.com`, add `domain.com` to the\n`config/host_list` file.\n\nFinally just start Haraka:\n\n    $ haraka -c /path/to/haraka_test\n\nAnd it will run.\n\nHowever the big thing you want to do next is to edit the `config/plugins`\nfile. This determines what plugins run in Haraka, and controls the overall\nbehaviour of the server. By default the server is setup to receive mails for\ndomains in `host_list` and deliver them via `qmail-queue`. Queueing to\nqmail is likely not what you need unless you have qmail installed, so this is\nlikely the first thing you want to change.\n\nEach plugin has documentation available via `haraka -h plugins/\u003cname\u003e`.\nLook there for information about how each plugin is configured, edit your\n`config/plugins` file, restart Haraka and enjoy!\n\nFeel free to write to the mailing list with any questions. Or use github\n\"Issues\".\n\n### Running from git\n\nIf you are unable to use npm to install Haraka, you can run from git by\nfollowing these steps:\n\nFirst clone the repository:\n\n    $ git clone https://github.com/baudehlo/Haraka.git\n    $ cd Haraka\n\nEdit `config/plugins` and `config/smtp.ini` to specify the plugins and\nconfig you want.\n\nFinally run Haraka:\n\n    $ node haraka.js\n\n### Performance\n\nHaraka is fast, due to the nature of using the v8 Javascript engine, and\nit is scalable due to using async I/O everywhere. On my local system I have\nmanaged to scale it up to 5000 emails per second (with minimal plugins).\n\nI welcome other performance evaluations.\n\n### License and Author\n\nHaraka is MIT licensed - see the LICENSE file for details.\n\nHaraka is a project started by Matt Sergeant, a 10 year veteran of the email\nand anti-spam world. Previous projects have been the project leader for\nSpamAssassin and a hacker on Qpsmtpd, a perl based mail server which is \nquite similar to Haraka (but not as fast due to perl being slower than\nJavascript).\n\n[1]: http://nodejs.org/\n[2]: http://youtu.be/6twKXMAsPsw\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruffrey%2Fhk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fruffrey%2Fhk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruffrey%2Fhk/lists"}