haraka 0.0.32 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +28 -0
- package/.githooks/pre-commit +41 -0
- package/.prettierignore +6 -0
- package/.qlty/.gitignore +7 -0
- package/.qlty/configs/.shellcheckrc +1 -0
- package/.qlty/qlty.toml +15 -0
- package/CHANGELOG.md +1872 -62
- package/CLAUDE.md +40 -0
- package/CONTRIBUTORS.md +34 -0
- package/Dockerfile +50 -0
- package/GEMINI.md +38 -0
- package/LICENSE +2 -1
- package/Plugins.md +227 -0
- package/README.md +100 -115
- package/SECURITY.md +178 -0
- package/TODO +22 -0
- package/address.js +53 -0
- package/bin/haraka +593 -0
- package/bin/haraka_grep +32 -0
- package/config/aliases +2 -0
- package/config/auth_flat_file.ini +7 -0
- package/config/auth_vpopmaild.ini +9 -0
- package/config/connection.ini +79 -0
- package/config/delay_deny.ini +7 -0
- package/config/dhparams.pem +8 -0
- package/config/host_list +3 -0
- package/config/host_list_regex +6 -0
- package/config/http.ini +11 -0
- package/config/lmtp.ini +7 -0
- package/config/log.ini +11 -0
- package/config/me +1 -0
- package/config/outbound.bounce_message +18 -0
- package/config/outbound.bounce_message_html +36 -0
- package/config/outbound.bounce_message_image +106 -0
- package/config/outbound.ini +24 -0
- package/config/plugins +67 -0
- package/config/smtp.ini +37 -0
- package/config/smtp_bridge.ini +4 -0
- package/config/smtp_forward.ini +31 -0
- package/config/smtp_proxy.ini +27 -0
- package/config/tarpit.timeout +1 -0
- package/config/tls.ini +83 -0
- package/config/tls_cert.pem +23 -0
- package/config/tls_key.pem +28 -0
- package/config/watch.ini +12 -0
- package/config/xclient.hosts +2 -0
- package/connection.js +1863 -0
- package/contrib/Haraka.cf +6 -0
- package/contrib/Haraka.pm +35 -0
- package/contrib/bad_smtp_server.pl +25 -0
- package/contrib/bsd-rc.d/haraka +61 -0
- package/contrib/debian-init.d/haraka +87 -0
- package/contrib/haraka.init +96 -0
- package/contrib/haraka.service +23 -0
- package/contrib/plugin2npm.sh +81 -0
- package/contrib/ubuntu-upstart/haraka.conf +27 -0
- package/coverage/coverage-final.json +2 -0
- package/coverage/coverage-summary.json +33 -0
- package/coverage/tmp/coverage-79131-1779241025146-0.json +1 -0
- package/coverage/tmp/coverage-79132-1779240999690-0.json +1 -0
- package/coverage/tmp/coverage-79172-1779241000095-0.json +1 -0
- package/coverage/tmp/coverage-79210-1779241000156-0.json +1 -0
- package/coverage/tmp/coverage-79211-1779241000209-0.json +1 -0
- package/coverage/tmp/coverage-79212-1779241000266-0.json +1 -0
- package/coverage/tmp/coverage-79213-1779241000441-0.json +1 -0
- package/coverage/tmp/coverage-79214-1779241000626-0.json +1 -0
- package/coverage/tmp/coverage-79215-1779241000795-0.json +1 -0
- package/coverage/tmp/coverage-79216-1779241000965-0.json +1 -0
- package/coverage/tmp/coverage-79218-1779241001013-0.json +1 -0
- package/coverage/tmp/coverage-79219-1779241001179-0.json +1 -0
- package/coverage/tmp/coverage-79220-1779241006249-0.json +1 -0
- package/coverage/tmp/coverage-79227-1779241011453-0.json +1 -0
- package/coverage/tmp/coverage-79229-1779241011537-0.json +1 -0
- package/coverage/tmp/coverage-79230-1779241011647-0.json +1 -0
- package/coverage/tmp/coverage-79231-1779241011765-0.json +1 -0
- package/coverage/tmp/coverage-79232-1779241011841-0.json +1 -0
- package/coverage/tmp/coverage-79233-1779241011909-0.json +1 -0
- package/coverage/tmp/coverage-79234-1779241011984-0.json +1 -0
- package/coverage/tmp/coverage-79235-1779241012055-0.json +1 -0
- package/coverage/tmp/coverage-79236-1779241012230-0.json +1 -0
- package/coverage/tmp/coverage-79237-1779241012300-0.json +1 -0
- package/coverage/tmp/coverage-79238-1779241012368-0.json +1 -0
- package/coverage/tmp/coverage-79239-1779241012438-0.json +1 -0
- package/coverage/tmp/coverage-79240-1779241012511-0.json +1 -0
- package/coverage/tmp/coverage-79241-1779241012582-0.json +1 -0
- package/coverage/tmp/coverage-79242-1779241012652-0.json +1 -0
- package/coverage/tmp/coverage-79243-1779241012814-0.json +1 -0
- package/coverage/tmp/coverage-79244-1779241012931-0.json +1 -0
- package/coverage/tmp/coverage-79245-1779241013007-0.json +1 -0
- package/coverage/tmp/coverage-79246-1779241013106-0.json +1 -0
- package/coverage/tmp/coverage-79247-1779241013178-0.json +1 -0
- package/coverage/tmp/coverage-79248-1779241013244-0.json +1 -0
- package/coverage/tmp/coverage-79249-1779241013409-0.json +1 -0
- package/coverage/tmp/coverage-79250-1779241013697-0.json +1 -0
- package/coverage/tmp/coverage-79251-1779241013847-0.json +1 -0
- package/coverage/tmp/coverage-79252-1779241014288-0.json +1 -0
- package/coverage/tmp/coverage-79253-1779241014378-0.json +1 -0
- package/coverage/tmp/coverage-79254-1779241014428-0.json +1 -0
- package/coverage/tmp/coverage-79255-1779241021774-0.json +1 -0
- package/coverage/tmp/coverage-80382-1779241021949-0.json +1 -0
- package/coverage/tmp/coverage-80383-1779241025019-0.json +1 -0
- package/coverage/tmp/coverage-80384-1779241025133-0.json +1 -0
- package/docs/Body.md +1 -0
- package/docs/Config.md +1 -0
- package/docs/Connection.md +153 -0
- package/docs/CoreConfig.md +96 -0
- package/docs/CustomReturnCodes.md +3 -0
- package/docs/HAProxy.md +62 -0
- package/docs/Header.md +1 -0
- package/docs/Logging.md +129 -0
- package/docs/Outbound.md +210 -0
- package/docs/Plugins.md +372 -0
- package/docs/Results.md +7 -0
- package/docs/Transaction.md +135 -0
- package/docs/Tutorial.md +183 -0
- package/docs/deprecated/access.md +3 -0
- package/docs/deprecated/backscatterer.md +9 -0
- package/docs/deprecated/connect.rdns_access.md +53 -0
- package/docs/deprecated/data.headers.md +3 -0
- package/docs/deprecated/data.nomsgid.md +7 -0
- package/docs/deprecated/data.noreceived.md +11 -0
- package/docs/deprecated/data.rfc5322_header_checks.md +11 -0
- package/docs/deprecated/dkim_sign.md +97 -0
- package/docs/deprecated/dkim_verify.md +28 -0
- package/docs/deprecated/dnsbl.md +80 -0
- package/docs/deprecated/dnswl.md +73 -0
- package/docs/deprecated/lookup_rdns.strict.md +67 -0
- package/docs/deprecated/mail_from.access.md +52 -0
- package/docs/deprecated/mail_from.blocklist.md +18 -0
- package/docs/deprecated/mail_from.nobounces.md +8 -0
- package/docs/deprecated/rcpt_to.access.md +53 -0
- package/docs/deprecated/rcpt_to.blocklist.md +18 -0
- package/docs/deprecated/rcpt_to.routes.md +3 -0
- package/docs/deprecated/rdns.regexp.md +30 -0
- package/docs/plugins/aliases.md +3 -0
- package/docs/plugins/auth/auth_bridge.md +34 -0
- package/docs/plugins/auth/auth_ldap.md +4 -0
- package/docs/plugins/auth/auth_proxy.md +36 -0
- package/docs/plugins/auth/auth_vpopmaild.md +33 -0
- package/docs/plugins/auth/flat_file.md +40 -0
- package/docs/plugins/block_me.md +18 -0
- package/docs/plugins/data.signatures.md +11 -0
- package/docs/plugins/delay_deny.md +23 -0
- package/docs/plugins/max_unrecognized_commands.md +6 -0
- package/docs/plugins/prevent_credential_leaks.md +22 -0
- package/docs/plugins/process_title.md +42 -0
- package/docs/plugins/queue/deliver.md +3 -0
- package/docs/plugins/queue/discard.md +32 -0
- package/docs/plugins/queue/lmtp.md +24 -0
- package/docs/plugins/queue/qmail-queue.md +16 -0
- package/docs/plugins/queue/quarantine.md +87 -0
- package/docs/plugins/queue/smtp_bridge.md +32 -0
- package/docs/plugins/queue/smtp_forward.md +127 -0
- package/docs/plugins/queue/smtp_proxy.md +68 -0
- package/docs/plugins/queue/test.md +7 -0
- package/docs/plugins/rcpt_to.in_host_list.md +34 -0
- package/docs/plugins/rcpt_to.max_count.md +3 -0
- package/docs/plugins/record_envelope_addresses.md +20 -0
- package/docs/plugins/relay.md +3 -0
- package/docs/plugins/reseed_rng.md +16 -0
- package/docs/plugins/status.md +41 -0
- package/docs/plugins/tarpit.md +50 -0
- package/docs/plugins/tls.md +235 -0
- package/docs/plugins/toobusy.md +27 -0
- package/docs/plugins/xclient.md +10 -0
- package/docs/tutorials/Migrating_from_v1_to_v2.md +96 -0
- package/docs/tutorials/SettingUpOutbound.md +62 -0
- package/eslint.config.mjs +2 -0
- package/haraka.js +74 -0
- package/haraka.sh +2 -0
- package/http/html/404.html +58 -0
- package/http/html/index.html +47 -0
- package/http/package.json +21 -0
- package/line_socket.js +24 -0
- package/logger.js +322 -0
- package/outbound/client_pool.js +59 -0
- package/outbound/config.js +134 -0
- package/outbound/hmail.js +1504 -0
- package/outbound/index.js +349 -0
- package/outbound/qfile.js +93 -0
- package/outbound/queue.js +399 -0
- package/outbound/tls.js +85 -0
- package/outbound/todo.js +17 -0
- package/package.json +91 -29
- package/plugins/.eslintrc.yaml +3 -0
- package/plugins/auth/auth_base.js +261 -0
- package/plugins/auth/auth_bridge.js +20 -0
- package/plugins/auth/auth_proxy.js +227 -0
- package/plugins/auth/auth_vpopmaild.js +162 -0
- package/plugins/auth/flat_file.js +44 -0
- package/plugins/block_me.js +88 -0
- package/plugins/data.signatures.js +30 -0
- package/plugins/delay_deny.js +153 -0
- package/plugins/prevent_credential_leaks.js +61 -0
- package/plugins/process_title.js +197 -0
- package/plugins/profile.js +11 -0
- package/plugins/queue/deliver.js +12 -0
- package/plugins/queue/discard.js +27 -0
- package/plugins/queue/lmtp.js +45 -0
- package/plugins/queue/qmail-queue.js +93 -0
- package/plugins/queue/quarantine.js +133 -0
- package/plugins/queue/smtp_bridge.js +45 -0
- package/plugins/queue/smtp_forward.js +371 -0
- package/plugins/queue/smtp_proxy.js +142 -0
- package/plugins/queue/test.js +15 -0
- package/plugins/rcpt_to.host_list_base.js +65 -0
- package/plugins/rcpt_to.in_host_list.js +56 -0
- package/plugins/record_envelope_addresses.js +17 -0
- package/plugins/reseed_rng.js +7 -0
- package/plugins/status.js +274 -0
- package/plugins/tarpit.js +45 -0
- package/plugins/tls.js +164 -0
- package/plugins/toobusy.js +47 -0
- package/plugins/xclient.js +124 -0
- package/plugins.js +604 -0
- package/queue/1772642154987_1775581346001_4_82235_TGwgfd_2_mattbook-m3.home.simerson.net +0 -0
- package/run_tests +11 -0
- package/server.js +827 -0
- package/smtp_client.js +504 -0
- package/test/.eslintrc.yaml +11 -0
- package/test/config/auth_flat_file.ini +5 -0
- package/test/config/block_me.recipient +1 -0
- package/test/config/block_me.senders +1 -0
- package/test/config/dhparams.pem +8 -0
- package/test/config/host_list +2 -0
- package/test/config/outbound_tls_cert.pem +1 -0
- package/test/config/outbound_tls_key.pem +1 -0
- package/test/config/plugins +7 -0
- package/test/config/smtp.ini +11 -0
- package/test/config/smtp_forward.ini +30 -0
- package/test/config/tls/example.com/_.example.com.key +28 -0
- package/test/config/tls/example.com/example.com.crt +25 -0
- package/test/config/tls/haraka.local.pem +51 -0
- package/test/config/tls.ini +45 -0
- package/test/config/tls_cert.pem +21 -0
- package/test/config/tls_key.pem +28 -0
- package/test/connection.js +817 -0
- package/test/fixtures/haproxy_allowed/config/connection.ini +3 -0
- package/test/fixtures/haproxy_disabled/config/connection.ini +3 -0
- package/test/fixtures/haproxy_untrusted/config/connection.ini +3 -0
- package/test/fixtures/line_socket.js +21 -0
- package/test/fixtures/todo_qfile.txt +0 -0
- package/test/fixtures/util_hmailitem.js +156 -0
- package/test/installation/config/test-plugin-flat +1 -0
- package/test/installation/config/test-plugin.ini +10 -0
- package/test/installation/config/tls.ini +1 -0
- package/test/installation/node_modules/load_first/index.js +5 -0
- package/test/installation/node_modules/load_first/package.json +11 -0
- package/test/installation/node_modules/test-plugin/config/test-plugin-flat +1 -0
- package/test/installation/node_modules/test-plugin/config/test-plugin.ini +9 -0
- package/test/installation/node_modules/test-plugin/package.json +5 -0
- package/test/installation/node_modules/test-plugin/test-plugin.js +5 -0
- package/test/installation/plugins/base_plugin.js +3 -0
- package/test/installation/plugins/folder_plugin/index.js +3 -0
- package/test/installation/plugins/folder_plugin/package.json +11 -0
- package/test/installation/plugins/inherits.js +7 -0
- package/test/installation/plugins/load_first.js +3 -0
- package/test/installation/plugins/plugin.js +1 -0
- package/test/installation/plugins/tls.js +3 -0
- package/test/logger.js +217 -0
- package/test/loud/config/dhparams.pem +0 -0
- package/test/loud/config/tls/goobered.pem +45 -0
- package/test/loud/config/tls.ini +43 -0
- package/test/mail_specimen/base64-root-part.txt +23 -0
- package/test/mail_specimen/varied-fold-lengths-preserve-data.txt +283 -0
- package/test/outbound/bounce_net_errors.js +133 -0
- package/test/outbound/bounce_rfc3464.js +226 -0
- package/test/outbound/hmail.js +210 -0
- package/test/outbound/index.js +385 -0
- package/test/outbound/qfile.js +124 -0
- package/test/outbound/queue.js +325 -0
- package/test/plugins/auth/auth_base.js +620 -0
- package/test/plugins/auth/auth_bridge.js +80 -0
- package/test/plugins/auth/auth_vpopmaild.js +81 -0
- package/test/plugins/auth/flat_file.js +123 -0
- package/test/plugins/block_me.js +141 -0
- package/test/plugins/data.signatures.js +111 -0
- package/test/plugins/delay_deny.js +262 -0
- package/test/plugins/prevent_credential_leaks.js +174 -0
- package/test/plugins/process_title.js +141 -0
- package/test/plugins/queue/deliver.js +98 -0
- package/test/plugins/queue/discard.js +78 -0
- package/test/plugins/queue/lmtp.js +137 -0
- package/test/plugins/queue/qmail-queue.js +98 -0
- package/test/plugins/queue/quarantine.js +80 -0
- package/test/plugins/queue/smtp_bridge.js +152 -0
- package/test/plugins/queue/smtp_forward.js +1023 -0
- package/test/plugins/queue/smtp_proxy.js +138 -0
- package/test/plugins/rcpt_to.host_list_base.js +102 -0
- package/test/plugins/rcpt_to.in_host_list.js +186 -0
- package/test/plugins/record_envelope_addresses.js +66 -0
- package/test/plugins/reseed_rng.js +34 -0
- package/test/plugins/status.js +207 -0
- package/test/plugins/tarpit.js +90 -0
- package/test/plugins/tls.js +86 -0
- package/test/plugins/toobusy.js +21 -0
- package/test/plugins/xclient.js +119 -0
- package/test/plugins.js +230 -0
- package/test/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_fixed +0 -0
- package/test/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_haraka +0 -0
- package/test/queue/1508269674999_1508269674999_0_34002_socVUF_1_haraka +0 -0
- package/test/queue/1508455115683_1508455115683_0_90253_9Q4o4V_1_haraka +0 -0
- package/test/queue/zero-length +0 -0
- package/test/server.js +1012 -0
- package/test/smtp_client.js +1303 -0
- package/test/tls_socket.js +321 -0
- package/test/transaction.js +554 -0
- package/tls_socket.js +771 -0
- package/transaction.js +267 -0
- package/lib/index.js +0 -371
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
This document provides foundational mandates and expert guidance. These instructions take precedence over general workflows.
|
|
2
|
+
|
|
3
|
+
## Technical Standards
|
|
4
|
+
|
|
5
|
+
- Consistency: Compatibiilty is important, only break it for Good Cause.
|
|
6
|
+
- Research: Identify the relevant RFC(s). Analyze existing implementation and verify conformance.
|
|
7
|
+
- JS features: this project targets LTS versions of Node.js and/or modern web browsers.
|
|
8
|
+
- ES2024 features should be preferred over legacy patterns.
|
|
9
|
+
- When updating files, add `node:` prefixes to any Node.js built-in `require()` calls that lack them (e.g. `require('fs')` → `require('node:fs')`)
|
|
10
|
+
- Use Conventional Commit format for all commit messages.
|
|
11
|
+
- Prefer for..(of|in) iterators over forEach
|
|
12
|
+
- Prefer node:readline for parsing files into lines
|
|
13
|
+
|
|
14
|
+
## Testing
|
|
15
|
+
|
|
16
|
+
- Empirical Reproduction: For bug fixes, first create a failing test case in the corresponding test file.
|
|
17
|
+
- Coverage: Every new feature MUST have a corresponding test file with high coverage.
|
|
18
|
+
- Linting & Formatting: Adhere to the project's `eslint` and `prettier` configurations.
|
|
19
|
+
- Migrate existing tests from mocha to `node --test`
|
|
20
|
+
- when loading node:assert, load it as node:assert/strict
|
|
21
|
+
|
|
22
|
+
## Tooling Commands
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Test
|
|
26
|
+
npm run test # Run full test suite
|
|
27
|
+
npm run test:coverage # Run tests with coverage
|
|
28
|
+
node --test test/path/to/file.js # Run a single test file (node:test packages)
|
|
29
|
+
|
|
30
|
+
# Lint & Format
|
|
31
|
+
npm run lint # Check for linting errors.
|
|
32
|
+
npm run lint:fix # Auto-fix lint issues
|
|
33
|
+
npm run prettier # Check formatting
|
|
34
|
+
npm run prettier:fix # Auto-format
|
|
35
|
+
npm run format # prettier:fix + lint:fix (run before committing)
|
|
36
|
+
|
|
37
|
+
# Dependency version management
|
|
38
|
+
npm run versions # Check for version drift
|
|
39
|
+
npm run versions:fix # Update versions
|
|
40
|
+
```
|
package/CONTRIBUTORS.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Contributors
|
|
2
|
+
|
|
3
|
+
This handcrafted artisanal software is brought to you by:
|
|
4
|
+
|
|
5
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/261635?v=4"><br><a href="https://github.com/msimerson">msimerson</a> (<a href="https://github.com/haraka/Haraka/commits?author=msimerson">1685</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/662371?v=4"><br><a href="https://github.com/baudehlo">baudehlo</a> (<a href="https://github.com/haraka/Haraka/commits?author=baudehlo">969</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/550490?v=4"><br><a href="https://github.com/smfreegard">smfreegard</a> (<a href="https://github.com/haraka/Haraka/commits?author=smfreegard">794</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/959600?v=4"><br><a href="https://github.com/godsflaw">godsflaw</a> (<a href="https://github.com/haraka/Haraka/commits?author=godsflaw">171</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/934254?v=4"><br><a href="https://github.com/analogic">analogic</a> (<a href="https://github.com/haraka/Haraka/commits?author=analogic">42</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1674289?v=4"><br><a href="https://github.com/Dexus">Dexus</a> (<a href="https://github.com/haraka/Haraka/commits?author=Dexus">42</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/82041?v=4"><br><a href="https://github.com/gramakri">gramakri</a> (<a href="https://github.com/haraka/Haraka/commits?author=gramakri">40</a>) |
|
|
6
|
+
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
|
7
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/203240?v=4"><br><a href="https://github.com/lnedry">lnedry</a> (<a href="https://github.com/haraka/Haraka/commits?author=lnedry">27</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/748075?v=4"><br><a href="https://github.com/celesteking">celesteking</a> (<a href="https://github.com/haraka/Haraka/commits?author=celesteking">21</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/791972?v=4"><br><a href="https://github.com/lpatters">lpatters</a> (<a href="https://github.com/haraka/Haraka/commits?author=lpatters">20</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/366268?v=4"><br><a href="https://github.com/chazomaticus">chazomaticus</a> (<a href="https://github.com/haraka/Haraka/commits?author=chazomaticus">19</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/123708?v=4"><br><a href="https://github.com/arlolra">arlolra</a> (<a href="https://github.com/haraka/Haraka/commits?author=arlolra">16</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/271024?v=4"><br><a href="https://github.com/hayesgm">hayesgm</a> (<a href="https://github.com/haraka/Haraka/commits?author=hayesgm">16</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1573133?v=4"><br><a href="https://github.com/gauravaror">gauravaror</a> (<a href="https://github.com/haraka/Haraka/commits?author=gauravaror">14</a>) |
|
|
8
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/260607?v=4"><br><a href="https://github.com/typingArtist">typingArtist</a> (<a href="https://github.com/haraka/Haraka/commits?author=typingArtist">14</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/11343494?v=4"><br><a href="https://github.com/superman20">superman20</a> (<a href="https://github.com/haraka/Haraka/commits?author=superman20">13</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/158380?v=4"><br><a href="https://github.com/darkpixel">darkpixel</a> (<a href="https://github.com/haraka/Haraka/commits?author=darkpixel">12</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/9887966?v=4"><br><a href="https://github.com/KingNoosh">KingNoosh</a> (<a href="https://github.com/haraka/Haraka/commits?author=KingNoosh">11</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/5229495?v=4"><br><a href="https://github.com/tstonis">tstonis</a> (<a href="https://github.com/haraka/Haraka/commits?author=tstonis">10</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1746394?v=4"><br><a href="https://github.com/wltsmrz">wltsmrz</a> (<a href="https://github.com/haraka/Haraka/commits?author=wltsmrz">9</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/218741413?v=4"><br><a href="https://github.com/SamuelGrave">SamuelGrave</a> (<a href="https://github.com/haraka/Haraka/commits?author=SamuelGrave">9</a>) |
|
|
9
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/2176651?v=4"><br><a href="https://github.com/fatalbanana">fatalbanana</a> (<a href="https://github.com/haraka/Haraka/commits?author=fatalbanana">9</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/231081?v=4"><br><a href="https://github.com/EyePulp">EyePulp</a> (<a href="https://github.com/haraka/Haraka/commits?author=EyePulp">8</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/81561?v=4"><br><a href="https://github.com/Synchro">Synchro</a> (<a href="https://github.com/haraka/Haraka/commits?author=Synchro">8</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/3957811?v=4"><br><a href="https://github.com/gene-hightower">gene-hightower</a> (<a href="https://github.com/haraka/Haraka/commits?author=gene-hightower">7</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/8224508?v=4"><br><a href="https://github.com/DarkSorrow">DarkSorrow</a> (<a href="https://github.com/haraka/Haraka/commits?author=DarkSorrow">6</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/103802?v=4"><br><a href="https://github.com/joshuathayer">joshuathayer</a> (<a href="https://github.com/haraka/Haraka/commits?author=joshuathayer">6</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/918201?v=4"><br><a href="https://github.com/DoobleD">DoobleD</a> (<a href="https://github.com/haraka/Haraka/commits?author=DoobleD">5</a>) |
|
|
10
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/298453?v=4"><br><a href="https://github.com/zllovesuki">zllovesuki</a> (<a href="https://github.com/haraka/Haraka/commits?author=zllovesuki">5</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/132251?v=4"><br><a href="https://github.com/schamane">schamane</a> (<a href="https://github.com/haraka/Haraka/commits?author=schamane">5</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/2158203?v=4"><br><a href="https://github.com/luto">luto</a> (<a href="https://github.com/haraka/Haraka/commits?author=luto">5</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/21576638?v=4"><br><a href="https://github.com/steflw">steflw</a> (<a href="https://github.com/haraka/Haraka/commits?author=steflw">5</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1263856?v=4"><br><a href="https://github.com/ricardopolo">ricardopolo</a> (<a href="https://github.com/haraka/Haraka/commits?author=ricardopolo">5</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1521113?v=4"><br><a href="https://github.com/hontas">hontas</a> (<a href="https://github.com/haraka/Haraka/commits?author=hontas">5</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/11270?v=4"><br><a href="https://github.com/swerter">swerter</a> (<a href="https://github.com/haraka/Haraka/commits?author=swerter">4</a>) |
|
|
11
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/791835?v=4"><br><a href="https://github.com/Juerd">Juerd</a> (<a href="https://github.com/haraka/Haraka/commits?author=Juerd">4</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/5351045?v=4"><br><a href="https://github.com/rhedshi">rhedshi</a> (<a href="https://github.com/haraka/Haraka/commits?author=rhedshi">4</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/7155684?v=4"><br><a href="https://github.com/rw251">rw251</a> (<a href="https://github.com/haraka/Haraka/commits?author=rw251">4</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/13922268?v=4"><br><a href="https://github.com/jdai8">jdai8</a> (<a href="https://github.com/haraka/Haraka/commits?author=jdai8">4</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/34087?v=4"><br><a href="https://github.com/fredjean">fredjean</a> (<a href="https://github.com/haraka/Haraka/commits?author=fredjean">4</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/8285462?v=4"><br><a href="https://github.com/CalgaryMichael">CalgaryMichael</a> (<a href="https://github.com/haraka/Haraka/commits?author=CalgaryMichael">4</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/5624708?v=4"><br><a href="https://github.com/Bramzor">Bramzor</a> (<a href="https://github.com/haraka/Haraka/commits?author=Bramzor">4</a>) |
|
|
12
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/308887?v=4"><br><a href="https://github.com/benjisg">benjisg</a> (<a href="https://github.com/haraka/Haraka/commits?author=benjisg">4</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1451395?v=4"><br><a href="https://github.com/bmonty">bmonty</a> (<a href="https://github.com/haraka/Haraka/commits?author=bmonty">4</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/147893?v=4"><br><a href="https://github.com/Andrew565">Andrew565</a> (<a href="https://github.com/haraka/Haraka/commits?author=Andrew565">4</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/255701?v=4"><br><a href="https://github.com/abhas">abhas</a> (<a href="https://github.com/haraka/Haraka/commits?author=abhas">4</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/6220422?v=4"><br><a href="https://github.com/dcharbonnier">dcharbonnier</a> (<a href="https://github.com/haraka/Haraka/commits?author=dcharbonnier">3</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/232225?v=4"><br><a href="https://github.com/soncodi">soncodi</a> (<a href="https://github.com/haraka/Haraka/commits?author=soncodi">3</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/2115696?v=4"><br><a href="https://github.com/AuspeXeu">AuspeXeu</a> (<a href="https://github.com/haraka/Haraka/commits?author=AuspeXeu">3</a>) |
|
|
13
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/6684599?v=4"><br><a href="https://github.com/acharkizakaria">acharkizakaria</a> (<a href="https://github.com/haraka/Haraka/commits?author=acharkizakaria">3</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1810178?v=4"><br><a href="https://github.com/pvsousalima">pvsousalima</a> (<a href="https://github.com/haraka/Haraka/commits?author=pvsousalima">3</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/759912?v=4"><br><a href="https://github.com/davebeyer">davebeyer</a> (<a href="https://github.com/haraka/Haraka/commits?author=davebeyer">3</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/706078?v=4"><br><a href="https://github.com/brunolm">brunolm</a> (<a href="https://github.com/haraka/Haraka/commits?author=brunolm">3</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/7008027?v=4"><br><a href="https://github.com/mkp7">mkp7</a> (<a href="https://github.com/haraka/Haraka/commits?author=mkp7">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1007551?v=4"><br><a href="https://github.com/unquietwiki">unquietwiki</a> (<a href="https://github.com/haraka/Haraka/commits?author=unquietwiki">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/10368105?v=4"><br><a href="https://github.com/mtrivera">mtrivera</a> (<a href="https://github.com/haraka/Haraka/commits?author=mtrivera">2</a>) |
|
|
14
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/1829326?v=4"><br><a href="https://github.com/slattery">slattery</a> (<a href="https://github.com/haraka/Haraka/commits?author=slattery">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/8569238?v=4"><br><a href="https://github.com/MuraraAllan">MuraraAllan</a> (<a href="https://github.com/haraka/Haraka/commits?author=MuraraAllan">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/994004?v=4"><br><a href="https://github.com/stefanocoding">stefanocoding</a> (<a href="https://github.com/haraka/Haraka/commits?author=stefanocoding">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/5483299?v=4"><br><a href="https://github.com/thihara">thihara</a> (<a href="https://github.com/haraka/Haraka/commits?author=thihara">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/43457281?v=4"><br><a href="https://github.com/benjamonnguyen">benjamonnguyen</a> (<a href="https://github.com/haraka/Haraka/commits?author=benjamonnguyen">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/15035337?v=4"><br><a href="https://github.com/gtech99">gtech99</a> (<a href="https://github.com/haraka/Haraka/commits?author=gtech99">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/3073292?v=4"><br><a href="https://github.com/joelchornik">joelchornik</a> (<a href="https://github.com/haraka/Haraka/commits?author=joelchornik">2</a>) |
|
|
15
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/934178?v=4"><br><a href="https://github.com/vrevo">vrevo</a> (<a href="https://github.com/haraka/Haraka/commits?author=vrevo">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1249760?v=4"><br><a href="https://github.com/andreis">andreis</a> (<a href="https://github.com/haraka/Haraka/commits?author=andreis">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/15694566?v=4"><br><a href="https://github.com/apoorv-mishra">apoorv-mishra</a> (<a href="https://github.com/haraka/Haraka/commits?author=apoorv-mishra">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/563469?v=4"><br><a href="https://github.com/niieani">niieani</a> (<a href="https://github.com/haraka/Haraka/commits?author=niieani">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/196198?v=4"><br><a href="https://github.com/hathaway">hathaway</a> (<a href="https://github.com/haraka/Haraka/commits?author=hathaway">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/14928995?v=4"><br><a href="https://github.com/carolinaknoll">carolinaknoll</a> (<a href="https://github.com/haraka/Haraka/commits?author=carolinaknoll">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/654682?v=4"><br><a href="https://github.com/martin1yness">martin1yness</a> (<a href="https://github.com/haraka/Haraka/commits?author=martin1yness">2</a>) |
|
|
16
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/4955052?v=4"><br><a href="https://github.com/chasent">chasent</a> (<a href="https://github.com/haraka/Haraka/commits?author=chasent">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1346804?v=4"><br><a href="https://github.com/louis-lau">louis-lau</a> (<a href="https://github.com/haraka/Haraka/commits?author=louis-lau">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/48384?v=4"><br><a href="https://github.com/dalibor">dalibor</a> (<a href="https://github.com/haraka/Haraka/commits?author=dalibor">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/444769?v=4"><br><a href="https://github.com/dweekly">dweekly</a> (<a href="https://github.com/haraka/Haraka/commits?author=dweekly">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/5428603?v=4"><br><a href="https://github.com/Illirgway">Illirgway</a> (<a href="https://github.com/haraka/Haraka/commits?author=Illirgway">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/598809?v=4"><br><a href="https://github.com/tojocky">tojocky</a> (<a href="https://github.com/haraka/Haraka/commits?author=tojocky">2</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/783006?v=4"><br><a href="https://github.com/samnegri">samnegri</a> (<a href="https://github.com/haraka/Haraka/commits?author=samnegri">1</a>) |
|
|
17
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/2609361?v=4"><br><a href="https://github.com/zereraz">zereraz</a> (<a href="https://github.com/haraka/Haraka/commits?author=zereraz">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/38491?v=4"><br><a href="https://github.com/darobin">darobin</a> (<a href="https://github.com/haraka/Haraka/commits?author=darobin">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/928787?v=4"><br><a href="https://github.com/Infern1">Infern1</a> (<a href="https://github.com/haraka/Haraka/commits?author=Infern1">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/11057526?v=4"><br><a href="https://github.com/Currerius">Currerius</a> (<a href="https://github.com/haraka/Haraka/commits?author=Currerius">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/6680615?v=4"><br><a href="https://github.com/ckcr4lyf">ckcr4lyf</a> (<a href="https://github.com/haraka/Haraka/commits?author=ckcr4lyf">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/857880?v=4"><br><a href="https://github.com/feisuzhu">feisuzhu</a> (<a href="https://github.com/haraka/Haraka/commits?author=feisuzhu">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/3337824?v=4"><br><a href="https://github.com/pvandijk">pvandijk</a> (<a href="https://github.com/haraka/Haraka/commits?author=pvandijk">1</a>) |
|
|
18
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/651048?v=4"><br><a href="https://github.com/Wesitos">Wesitos</a> (<a href="https://github.com/haraka/Haraka/commits?author=Wesitos">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/114246?v=4"><br><a href="https://github.com/pedroaxl">pedroaxl</a> (<a href="https://github.com/haraka/Haraka/commits?author=pedroaxl">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/600097?v=4"><br><a href="https://github.com/pstadler">pstadler</a> (<a href="https://github.com/haraka/Haraka/commits?author=pstadler">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/48409110?v=4"><br><a href="https://github.com/felixauringer">felixauringer</a> (<a href="https://github.com/haraka/Haraka/commits?author=felixauringer">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/163142?v=4"><br><a href="https://github.com/patchlog">patchlog</a> (<a href="https://github.com/haraka/Haraka/commits?author=patchlog">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/109316?v=4"><br><a href="https://github.com/PAStheLoD">PAStheLoD</a> (<a href="https://github.com/haraka/Haraka/commits?author=PAStheLoD">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/3527052?v=4"><br><a href="https://github.com/pjeby">pjeby</a> (<a href="https://github.com/haraka/Haraka/commits?author=pjeby">1</a>) |
|
|
19
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/11526146?v=4"><br><a href="https://github.com/noopnik">noopnik</a> (<a href="https://github.com/haraka/Haraka/commits?author=noopnik">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/10524529?v=4"><br><a href="https://github.com/nmummau">nmummau</a> (<a href="https://github.com/haraka/Haraka/commits?author=nmummau">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1811410?v=4"><br><a href="https://github.com/blackrosezy">blackrosezy</a> (<a href="https://github.com/haraka/Haraka/commits?author=blackrosezy">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/913734?v=4"><br><a href="https://github.com/discretepackets">discretepackets</a> (<a href="https://github.com/haraka/Haraka/commits?author=discretepackets">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/69902?v=4"><br><a href="https://github.com/mfogel">mfogel</a> (<a href="https://github.com/haraka/Haraka/commits?author=mfogel">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/139480?v=4"><br><a href="https://github.com/mjpearson">mjpearson</a> (<a href="https://github.com/haraka/Haraka/commits?author=mjpearson">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/92839?v=4"><br><a href="https://github.com/mjackson">mjackson</a> (<a href="https://github.com/haraka/Haraka/commits?author=mjackson">1</a>) |
|
|
20
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/118732?v=4"><br><a href="https://github.com/mcreenan">mcreenan</a> (<a href="https://github.com/haraka/Haraka/commits?author=mcreenan">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/19753510?v=4"><br><a href="https://github.com/michacassola">michacassola</a> (<a href="https://github.com/haraka/Haraka/commits?author=michacassola">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/16570127?v=4"><br><a href="https://github.com/greenlighttec">greenlighttec</a> (<a href="https://github.com/haraka/Haraka/commits?author=greenlighttec">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/2956870?v=4"><br><a href="https://github.com/catroll">catroll</a> (<a href="https://github.com/haraka/Haraka/commits?author=catroll">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/6382246?v=4"><br><a href="https://github.com/yeya">yeya</a> (<a href="https://github.com/haraka/Haraka/commits?author=yeya">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/18624942?v=4"><br><a href="https://github.com/jackwellsxyz">jackwellsxyz</a> (<a href="https://github.com/haraka/Haraka/commits?author=jackwellsxyz">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/115237?v=4"><br><a href="https://github.com/silverwind">silverwind</a> (<a href="https://github.com/haraka/Haraka/commits?author=silverwind">1</a>) |
|
|
21
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/24767512?v=4"><br><a href="https://github.com/shurli">shurli</a> (<a href="https://github.com/haraka/Haraka/commits?author=shurli">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/46054769?v=4"><br><a href="https://github.com/sathishvenkataraman">sathishvenkataraman</a> (<a href="https://github.com/haraka/Haraka/commits?author=sathishvenkataraman">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/8831920?v=4"><br><a href="https://github.com/qhxin">qhxin</a> (<a href="https://github.com/haraka/Haraka/commits?author=qhxin">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/18039170?v=4"><br><a href="https://github.com/pekapl">pekapl</a> (<a href="https://github.com/haraka/Haraka/commits?author=pekapl">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/4928168?v=4"><br><a href="https://github.com/nfnty">nfnty</a> (<a href="https://github.com/haraka/Haraka/commits?author=nfnty">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/21057453?v=4"><br><a href="https://github.com/inmula">inmula</a> (<a href="https://github.com/haraka/Haraka/commits?author=inmula">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/22168943?v=4"><br><a href="https://github.com/mathquis">mathquis</a> (<a href="https://github.com/haraka/Haraka/commits?author=mathquis">1</a>) |
|
|
22
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/320906?v=4"><br><a href="https://github.com/martinvd">martinvd</a> (<a href="https://github.com/haraka/Haraka/commits?author=martinvd">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/217669830?v=4"><br><a href="https://github.com/lmacayo">lmacayo</a> (<a href="https://github.com/haraka/Haraka/commits?author=lmacayo">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/181014?v=4"><br><a href="https://github.com/k2s">k2s</a> (<a href="https://github.com/haraka/Haraka/commits?author=k2s">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/650890?v=4"><br><a href="https://github.com/zombified">zombified</a> (<a href="https://github.com/haraka/Haraka/commits?author=zombified">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1024137?v=4"><br><a href="https://github.com/dhager7">dhager7</a> (<a href="https://github.com/haraka/Haraka/commits?author=dhager7">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/274063935?v=4"><br><a href="https://github.com/cmooneycl">cmooneycl</a> (<a href="https://github.com/haraka/Haraka/commits?author=cmooneycl">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/25018388?v=4"><br><a href="https://github.com/ayankel">ayankel</a> (<a href="https://github.com/haraka/Haraka/commits?author=ayankel">1</a>) |
|
|
23
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/3277165?v=4"><br><a href="https://github.com/X-Ryl669">X-Ryl669</a> (<a href="https://github.com/haraka/Haraka/commits?author=X-Ryl669">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/952007?v=4"><br><a href="https://github.com/szepeviktor">szepeviktor</a> (<a href="https://github.com/haraka/Haraka/commits?author=szepeviktor">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/20950126?v=4"><br><a href="https://github.com/varunzxzx">varunzxzx</a> (<a href="https://github.com/haraka/Haraka/commits?author=varunzxzx">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/95691?v=4"><br><a href="https://github.com/noogen">noogen</a> (<a href="https://github.com/haraka/Haraka/commits?author=noogen">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/209270?v=4"><br><a href="https://github.com/TimWolla">TimWolla</a> (<a href="https://github.com/haraka/Haraka/commits?author=TimWolla">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/29933243?v=4"><br><a href="https://github.com/tiagorlampert">tiagorlampert</a> (<a href="https://github.com/haraka/Haraka/commits?author=tiagorlampert">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/912257?v=4"><br><a href="https://github.com/tomscytale">tomscytale</a> (<a href="https://github.com/haraka/Haraka/commits?author=tomscytale">1</a>) |
|
|
24
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/5239282?v=4"><br><a href="https://github.com/sriccio">sriccio</a> (<a href="https://github.com/haraka/Haraka/commits?author=sriccio">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/44905?v=4"><br><a href="https://github.com/fcoelho">fcoelho</a> (<a href="https://github.com/haraka/Haraka/commits?author=fcoelho">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/8796466?v=4"><br><a href="https://github.com/erickpece">erickpece</a> (<a href="https://github.com/haraka/Haraka/commits?author=erickpece">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/354409?v=4"><br><a href="https://github.com/endreszabo">endreszabo</a> (<a href="https://github.com/haraka/Haraka/commits?author=endreszabo">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/548763?v=4"><br><a href="https://github.com/duanefields">duanefields</a> (<a href="https://github.com/haraka/Haraka/commits?author=duanefields">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/6936055?v=4"><br><a href="https://github.com/DomAmato">DomAmato</a> (<a href="https://github.com/haraka/Haraka/commits?author=DomAmato">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/26029735?v=4"><br><a href="https://github.com/lavieennoir">lavieennoir</a> (<a href="https://github.com/haraka/Haraka/commits?author=lavieennoir">1</a>) |
|
|
25
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/166466?v=4"><br><a href="https://github.com/dspangenberg">dspangenberg</a> (<a href="https://github.com/haraka/Haraka/commits?author=dspangenberg">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/100674?v=4"><br><a href="https://github.com/d--j">d--j</a> (<a href="https://github.com/haraka/Haraka/commits?author=d--j">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/81616?v=4"><br><a href="https://github.com/damoxc">damoxc</a> (<a href="https://github.com/haraka/Haraka/commits?author=damoxc">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/37262317?v=4"><br><a href="https://github.com/dkmaker">dkmaker</a> (<a href="https://github.com/haraka/Haraka/commits?author=dkmaker">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/805639?v=4"><br><a href="https://github.com/cbestall">cbestall</a> (<a href="https://github.com/haraka/Haraka/commits?author=cbestall">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/962436?v=4"><br><a href="https://github.com/txase">txase</a> (<a href="https://github.com/haraka/Haraka/commits?author=txase">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1430118?v=4"><br><a href="https://github.com/thetrompf">thetrompf</a> (<a href="https://github.com/haraka/Haraka/commits?author=thetrompf">1</a>) |
|
|
26
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/623363?v=4"><br><a href="https://github.com/bmatson">bmatson</a> (<a href="https://github.com/haraka/Haraka/commits?author=bmatson">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/47733?v=4"><br><a href="https://github.com/ardiesaeidi">ardiesaeidi</a> (<a href="https://github.com/haraka/Haraka/commits?author=ardiesaeidi">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/47601131?v=4"><br><a href="https://github.com/AprilGrimoire">AprilGrimoire</a> (<a href="https://github.com/haraka/Haraka/commits?author=AprilGrimoire">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/14093131?v=4"><br><a href="https://github.com/andbar">andbar</a> (<a href="https://github.com/haraka/Haraka/commits?author=andbar">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/2813838?v=4"><br><a href="https://github.com/amirkarimi">amirkarimi</a> (<a href="https://github.com/haraka/Haraka/commits?author=amirkarimi">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/332898?v=4"><br><a href="https://github.com/alessioalex">alessioalex</a> (<a href="https://github.com/haraka/Haraka/commits?author=alessioalex">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/124756761?v=4"><br><a href="https://github.com/littleslicebigcity">littleslicebigcity</a> (<a href="https://github.com/haraka/Haraka/commits?author=littleslicebigcity">1</a>) |
|
|
27
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/1177304?v=4"><br><a href="https://github.com/mildsunrise">mildsunrise</a> (<a href="https://github.com/haraka/Haraka/commits?author=mildsunrise">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/30565?v=4"><br><a href="https://github.com/ajimix">ajimix</a> (<a href="https://github.com/haraka/Haraka/commits?author=ajimix">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/58205701?v=4"><br><a href="https://github.com/adarshasp87">adarshasp87</a> (<a href="https://github.com/haraka/Haraka/commits?author=adarshasp87">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/284925?v=4"><br><a href="https://github.com/64kps">64kps</a> (<a href="https://github.com/haraka/Haraka/commits?author=64kps">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/803496?v=4"><br><a href="https://github.com/mskrajnowski">mskrajnowski</a> (<a href="https://github.com/haraka/Haraka/commits?author=mskrajnowski">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/18592942?v=4"><br><a href="https://github.com/mnsilva">mnsilva</a> (<a href="https://github.com/haraka/Haraka/commits?author=mnsilva">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/6890321?v=4"><br><a href="https://github.com/httpstersk">httpstersk</a> (<a href="https://github.com/haraka/Haraka/commits?author=httpstersk">1</a>) |
|
|
28
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/28440072?v=4"><br><a href="https://github.com/leadbi">leadbi</a> (<a href="https://github.com/haraka/Haraka/commits?author=leadbi">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/22004482?v=4"><br><a href="https://github.com/kajes">kajes</a> (<a href="https://github.com/haraka/Haraka/commits?author=kajes">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/51789698?v=4"><br><a href="https://github.com/Young-Lord">Young-Lord</a> (<a href="https://github.com/haraka/Haraka/commits?author=Young-Lord">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/11235022?v=4"><br><a href="https://github.com/kzub">kzub</a> (<a href="https://github.com/haraka/Haraka/commits?author=kzub">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/510957?v=4"><br><a href="https://github.com/kevinmartin">kevinmartin</a> (<a href="https://github.com/haraka/Haraka/commits?author=kevinmartin">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/75720?v=4"><br><a href="https://github.com/kgoess">kgoess</a> (<a href="https://github.com/haraka/Haraka/commits?author=kgoess">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/5689132?v=4"><br><a href="https://github.com/mr-karan">mr-karan</a> (<a href="https://github.com/haraka/Haraka/commits?author=mr-karan">1</a>) |
|
|
29
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/7114909?v=4"><br><a href="https://github.com/tyranron">tyranron</a> (<a href="https://github.com/haraka/Haraka/commits?author=tyranron">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/49093?v=4"><br><a href="https://github.com/jplock">jplock</a> (<a href="https://github.com/haraka/Haraka/commits?author=jplock">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/411338?v=4"><br><a href="https://github.com/josteink">josteink</a> (<a href="https://github.com/haraka/Haraka/commits?author=josteink">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/646768?v=4"><br><a href="https://github.com/nebulade">nebulade</a> (<a href="https://github.com/haraka/Haraka/commits?author=nebulade">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/6860647?v=4"><br><a href="https://github.com/GuroKung">GuroKung</a> (<a href="https://github.com/haraka/Haraka/commits?author=GuroKung">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/2649838?v=4"><br><a href="https://github.com/stanek0j">stanek0j</a> (<a href="https://github.com/haraka/Haraka/commits?author=stanek0j">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/55651?v=4"><br><a href="https://github.com/jaredj">jaredj</a> (<a href="https://github.com/haraka/Haraka/commits?author=jaredj">1</a>) |
|
|
30
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/397735?v=4"><br><a href="https://github.com/jrb">jrb</a> (<a href="https://github.com/haraka/Haraka/commits?author=jrb">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/1560587?v=4"><br><a href="https://github.com/jkroepke">jkroepke</a> (<a href="https://github.com/haraka/Haraka/commits?author=jkroepke">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/5376280?v=4"><br><a href="https://github.com/Chopinsky">Chopinsky</a> (<a href="https://github.com/haraka/Haraka/commits?author=Chopinsky">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/195918?v=4"><br><a href="https://github.com/hperrin">hperrin</a> (<a href="https://github.com/haraka/Haraka/commits?author=hperrin">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/376721?v=4"><br><a href="https://github.com/urlund">urlund</a> (<a href="https://github.com/haraka/Haraka/commits?author=urlund">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/7700727?v=4"><br><a href="https://github.com/gwieshammer">gwieshammer</a> (<a href="https://github.com/haraka/Haraka/commits?author=gwieshammer">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/914107?v=4"><br><a href="https://github.com/gpetrioli">gpetrioli</a> (<a href="https://github.com/haraka/Haraka/commits?author=gpetrioli">1</a>) |
|
|
31
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/140875?v=4"><br><a href="https://github.com/fabiob">fabiob</a> (<a href="https://github.com/haraka/Haraka/commits?author=fabiob">1</a>) | <img height="80" src="https://avatars.githubusercontent.com/u/400795?v=4"><br><a href="https://github.com/felixrabe">felixrabe</a> (<a href="https://github.com/haraka/Haraka/commits?author=felixrabe">1</a>) | | | | | |
|
|
32
|
+
|
|
33
|
+
<sub>this file is generated by [.release](https://github.com/msimerson/.release).
|
|
34
|
+
Contribute to this project to get your GitHub profile included here.</sub>
|
package/Dockerfile
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# NOTICE: This is user-contributed and not officially supported by the Haraka team. Use at your own risk.
|
|
2
|
+
#
|
|
3
|
+
# This file describes how to build Haraka into a runnable linux container with all dependencies installed
|
|
4
|
+
# To build:
|
|
5
|
+
# 1.) Install docker (http://docker.io)
|
|
6
|
+
# 2.) Clone Haraka repo if you haven't already: git clone https://github.com/haraka/Haraka.git
|
|
7
|
+
# 3.) Modify config/host_list with the domain(s) that you'd like to receive mail to
|
|
8
|
+
# 4.) Build: cd Haraka && docker build .
|
|
9
|
+
# 5.) Run:
|
|
10
|
+
# docker run -d <imageid>
|
|
11
|
+
#
|
|
12
|
+
# VERSION 0.1
|
|
13
|
+
# DOCKER-VERSION 0.5.3
|
|
14
|
+
|
|
15
|
+
# See http://phusion.github.io/baseimage-docker/
|
|
16
|
+
FROM phusion/baseimage:focal-1.2.0
|
|
17
|
+
|
|
18
|
+
MAINTAINER Justin Plock <jplock@gmail.com>
|
|
19
|
+
|
|
20
|
+
ENV HOME /root
|
|
21
|
+
|
|
22
|
+
RUN /etc/my_init.d/00_regen_ssh_host_keys.sh
|
|
23
|
+
|
|
24
|
+
RUN sed 's/main$/main universe/' -i /etc/apt/sources.list
|
|
25
|
+
RUN DEBIAN_FRONTEND=noninteractive apt-get -y -q update
|
|
26
|
+
RUN DEBIAN_FRONTEND=noninteractive apt-get -y -q install software-properties-common g++ make git curl
|
|
27
|
+
RUN curl -sL https://deb.nodesource.com/setup_18.x | setuser root bash -
|
|
28
|
+
RUN DEBIAN_FRONTEND=noninteractive apt-get -y -q install nodejs && \
|
|
29
|
+
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
|
30
|
+
|
|
31
|
+
# Optional, useful for development
|
|
32
|
+
# See https://github.com/phusion/baseimage-docker#login_ssh
|
|
33
|
+
#RUN rm -f /etc/service/sshd/down
|
|
34
|
+
#RUN /usr/sbin/enable_insecure_key
|
|
35
|
+
|
|
36
|
+
# Install Haraka
|
|
37
|
+
RUN npm install -g Haraka --unsafe
|
|
38
|
+
RUN haraka -i /usr/local/haraka
|
|
39
|
+
ADD ./config/host_list /usr/local/haraka/config/host_list
|
|
40
|
+
ADD ./config/plugins /usr/local/haraka/config/plugins
|
|
41
|
+
RUN cd /usr/local/haraka && npm install
|
|
42
|
+
|
|
43
|
+
# Create haraka runit service
|
|
44
|
+
RUN mkdir /etc/service/haraka
|
|
45
|
+
ADD haraka.sh /etc/service/haraka/run
|
|
46
|
+
|
|
47
|
+
EXPOSE 25
|
|
48
|
+
|
|
49
|
+
# Start the init daemon - runit will launch the Haraka process
|
|
50
|
+
CMD ["/sbin/my_init"]
|
package/GEMINI.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
This document provides foundational mandates and expert guidance. These instructions take precedence over general workflows.
|
|
2
|
+
|
|
3
|
+
## Technical Standards
|
|
4
|
+
- Don't change the code unless specifically asked.
|
|
5
|
+
- Consistency: Compatibiilty is important, only break it for Good Cause.
|
|
6
|
+
- Research: Identify the relevant RFC(s). Analyze existing implementation and verify conformance.
|
|
7
|
+
- JS features: this project targets LTS versions of Node.js and/or modern web browsers. Therefore, JS2024 features should be preferred over legacy patterns.
|
|
8
|
+
- When updating files, add `node:` prefixes to any Node.js built-in `require()` calls that lack them (e.g. `require('fs')` → `require('node:fs')`)
|
|
9
|
+
- Use Conventional Commit format for all commit messages.
|
|
10
|
+
- Prefer for..(of|in) iterators over forEach
|
|
11
|
+
- Prefer node:readline for parsing files into lines
|
|
12
|
+
|
|
13
|
+
## Testing
|
|
14
|
+
- Empirical Reproduction: For bug fixes, first create a failing test case in the corresponding test file.
|
|
15
|
+
- Coverage: Every new feature MUST have a corresponding test file with high coverage.
|
|
16
|
+
- Linting & Formatting: Adhere to the project's `eslint` and `prettier` configurations.
|
|
17
|
+
- Migrate existing tests from mocha to `node --test`
|
|
18
|
+
- when loading node:assert, prefer to load it as node:assert/strict
|
|
19
|
+
|
|
20
|
+
## Tooling Commands
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Test
|
|
24
|
+
npm run test # Run full test suite
|
|
25
|
+
npm run test:coverage # Run tests with coverage
|
|
26
|
+
node --test test/path/to/file.js # Run a single test file (node:test packages)
|
|
27
|
+
|
|
28
|
+
# Lint & Format
|
|
29
|
+
npm run lint # Check for linting errors.
|
|
30
|
+
npm run lint:fix # Auto-fix lint issues
|
|
31
|
+
npm run prettier # Check formatting
|
|
32
|
+
npm run prettier:fix # Auto-format
|
|
33
|
+
npm run format # prettier:fix + lint:fix (run before committing)
|
|
34
|
+
|
|
35
|
+
# Dependency version management
|
|
36
|
+
npm run versions # Check for version drift
|
|
37
|
+
npm run versions:fix # Update versions
|
|
38
|
+
```
|
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2011 - 2025 Matt Sergeant
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -19,3 +19,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
|
22
|
+
|
package/Plugins.md
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# Haraka Plugins
|
|
2
|
+
|
|
3
|
+
To create your own plugin, see [Write a Plugin][write-plugin].
|
|
4
|
+
|
|
5
|
+
## Installing NPM packaged plugins
|
|
6
|
+
|
|
7
|
+
Plugins can be installed in the directory where Haraka was installed (where depends on your OS platform and whether you specified `-g`) or the Haraka install directory (haraka -i this_path). This example installs _my-great-plugin_ in the Haraka install directory:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
cd /etc/haraka
|
|
11
|
+
npm install haraka-plugin-my-great-plugin
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
NPM then installs the plugin and its dependencies in a `node_modules` directory within the Haraka install directory.
|
|
15
|
+
|
|
16
|
+
## Plugin Registry
|
|
17
|
+
|
|
18
|
+
A comprehensive list of known plugins. Create a PR to add yours to these lists.
|
|
19
|
+
|
|
20
|
+
### Auth Plugins
|
|
21
|
+
|
|
22
|
+
| Name | Description | Published |
|
|
23
|
+
| -------------------------------- | ------------------------------------------------- | --------- |
|
|
24
|
+
| [auth-enc-file][url-authencflat] | Auth against user/pass in an encrypted file | 2018 |
|
|
25
|
+
| [flat_file][url-authflat] | Auth against user/pass in a file | 2026 |
|
|
26
|
+
| [auth_bridge][url-authbridge] | Auth against remote MTA | 2026 |
|
|
27
|
+
| [auth-imap][url-auth-imap] | Auth against IMAP server | 2022 |
|
|
28
|
+
| [auth_ldap][url-auth-ldap] | Auth against LDAP | 2023 |
|
|
29
|
+
| [auth_proxy][url-authproxy] | Auth against remote MTA | 2026 |
|
|
30
|
+
| [auth_vpopmaild][url-authvpop] | Auth against vpopmaild | 2026 |
|
|
31
|
+
| [dkim][url-dkim] | DKIM sign & verify | 2026 |
|
|
32
|
+
| [dovecot][url-dovecot] | SMTP AUTH & recipient validation against dovecot | 2025 |
|
|
33
|
+
| [LDAP][url-ldap] | Aliases, Auth, and Recipient validation from LDAP | 2024 |
|
|
34
|
+
| [mailauth][url-mailauth] | Email Auth (SPF, DKIM, DMARC, ARC, & BIMI) | 2024 |
|
|
35
|
+
| [opendkim][url-opendkim] | DKIM sign and verify email messages | 2018 |
|
|
36
|
+
| [spf][url-spf] | Perform SPF checks | 2026 |
|
|
37
|
+
|
|
38
|
+
### Enrichment Plugins
|
|
39
|
+
|
|
40
|
+
| Name | Description | Published |
|
|
41
|
+
| ------------------------------------------ | --------------------------------------------- | --------- |
|
|
42
|
+
| [ASN][url-asn] | Get ASN info for remote senders | 2026 |
|
|
43
|
+
| [fcrdns][url-fcrdns] | Forward Confirmed reverse DNS | 2025 |
|
|
44
|
+
| [geoip][url-geoip] | get geographic information about mail senders | 2026 |
|
|
45
|
+
| [p0f][url-p0f] | TCP Fingerprinting | 2025 |
|
|
46
|
+
| [karma][url-karma] | Dynamic scoring of incoming connections | 2026 |
|
|
47
|
+
| [known-senders][url-known-senders] | Reward emails from those you send mail to | 2025 |
|
|
48
|
+
| [record_envelope_addresses][url-recordenv] | Adds message headers with ENV recips | 2026 |
|
|
49
|
+
|
|
50
|
+
### Filtering Plugins
|
|
51
|
+
|
|
52
|
+
| Name | Description | Published |
|
|
53
|
+
| ------------------------------------ | ---------------------------------------------- | --------- |
|
|
54
|
+
| [attachment][url-attach] | Restrict attachment types | 2026 |
|
|
55
|
+
| [block_me][url-blockme] | Populate block list via forwarded emails | 2026 |
|
|
56
|
+
| [avg][url-avg] | AVG antivirus scanner | 2024 |
|
|
57
|
+
| [clamd][url-clamd] | Anti-Virus scanning with ClamAV | 2025 |
|
|
58
|
+
| [data.signatures][url-sigs] | Block emails whose bodies match signatures | 2026 |
|
|
59
|
+
| [dcc][url-dcc] | Distributed Checksum Clearinghouse | 2025 |
|
|
60
|
+
| [dns-list][url-dns-list] | Check against DNS and reputation lists | 2025 |
|
|
61
|
+
| [early_talker][url-early] | Reject remotes that talk early | 2026 |
|
|
62
|
+
| [esets][url-esets] | Virus scanning with ESET Mail Security | 2025 |
|
|
63
|
+
| [greylist][url-greylist] | Greylisting | 2026 |
|
|
64
|
+
| [helo.checks][url-helo] | Validity checks of the HELO string | 2026 |
|
|
65
|
+
| [mail_from.is_resolvable][url-mfres] | Verifies the MAIL FROM domain resolves to a MX | 2026 |
|
|
66
|
+
| [messagesniffer][url-msgsniff] | Anti-spam via [MessageSniffer][url-ms] | 2025 |
|
|
67
|
+
| [milter][url-milter] | milter support | 2017 |
|
|
68
|
+
| [rspamd][url-rspamd] | Scan emails with rspamd | 2026 |
|
|
69
|
+
| [spamassassin][url-spamass] | Scan emails with SpamAssassin | 2026 |
|
|
70
|
+
| [uribl][url-uribl] | Block based on URI blacklists | 2025 |
|
|
71
|
+
|
|
72
|
+
### Logging & Telemetry
|
|
73
|
+
|
|
74
|
+
| Name | Description | Published |
|
|
75
|
+
| -------------------------------------------- | ---------------------------------------------------------------------------- | --------- |
|
|
76
|
+
| [accounting_files][url-acc-files] | Retrieve, Store and Archive custom information of outbound traffic | 2017 |
|
|
77
|
+
| [elasticsearch][url-elastic] | Store message metadata in Elasticsearch | 2026 |
|
|
78
|
+
| [log reader][url-logreader] | extract log entries from the haraka log file | 2026 |
|
|
79
|
+
| [outbound-logger][url-outbound-logger] | JSON logging of outbound email. Logs metadata about delivered/bounced emails | — |
|
|
80
|
+
| [process_title][url-proctitle] | Populate `ps` output with activity counters | 2026 |
|
|
81
|
+
| [syslog][url-syslog] | Log to syslog | 2026 |
|
|
82
|
+
| [watch][url-watch] | Watch live SMTP traffic in a web interface | 2026 |
|
|
83
|
+
|
|
84
|
+
### Queue Plugins
|
|
85
|
+
|
|
86
|
+
| Name | Description | Published |
|
|
87
|
+
| ---------------------------------- | ---------------------------------------------------------------------------- | --------- |
|
|
88
|
+
| [discard][url-qdisc] | queues messages to /dev/null | 2026 |
|
|
89
|
+
| [kafka][url-kafka] | Queue inbound mail to a Kafka topic | 2023 |
|
|
90
|
+
| [lmtp][url-qlmtp] | deliver queued messages via LMTP | 2026 |
|
|
91
|
+
| [mongodb][mongo-url] | Queue emails to MongoDB | 2024 |
|
|
92
|
+
| [qmail-queue][url-qmail] | queue to qmail | 2026 |
|
|
93
|
+
| [quarantine][url-qquart] | queue to a quarantine directory | 2026 |
|
|
94
|
+
| [rabbitmq][url-qrabbit] | queue to RabbitMQ | 2026 |
|
|
95
|
+
| [rabbitmq_amqplib][url-qrabbita] | queue to RabbitMQ using amqplib | — |
|
|
96
|
+
| [rails][url-qrails] | queue messages to a Rails app using [Action Mailbox][url-action-mailbox] | — |
|
|
97
|
+
| [smtp_bridge][url-qbridge] | Bridge SMTP sessions to another MTA | 2026 |
|
|
98
|
+
| [smtp_forward][url-qforward] | Forward emails to another MTA | 2026 |
|
|
99
|
+
| [smtp_proxy][url-qproxy] | Proxy SMTP connections to another MTA | 2026 |
|
|
100
|
+
| [wildduck][url-wildduck] | queue messages to Wild Duck | 2026 |
|
|
101
|
+
|
|
102
|
+
### Recipient Validation
|
|
103
|
+
|
|
104
|
+
| Name | Description | Published |
|
|
105
|
+
| ---------------------------------- | ----------------------------------------------------- | --------- |
|
|
106
|
+
| [dovecot][url-dovecot] | Recipient validation & SMTP AUTH against dovecot | 2025 |
|
|
107
|
+
| [LDAP][url-ldap] | Aliases, Auth, and Recipient validation from LDAP | 2024 |
|
|
108
|
+
| [recipient-routes][url-rroutes] | Route emails based on their recipient(s) | 2025 |
|
|
109
|
+
| [rcpt_to.in_host_list][url-rhost] | Define local email domains in a file | 2026 |
|
|
110
|
+
| [rcpt_to.ldap][url-rcpt-ldap] | Validate recipients against LDAP | 2023 |
|
|
111
|
+
| [rcpt-postgresql][url-postgres] | validate recipients against PostgreSQL | 2016 |
|
|
112
|
+
| [qmail-deliverable][url-rqmd] | Validate recipients against Qmail-Deliverable | 2026 |
|
|
113
|
+
| [vmta][url-vmta] | Virtual MTA management | 2017 |
|
|
114
|
+
| [wildduck][url-wildduck] | provides recipient checks against Wild Duck | 2026 |
|
|
115
|
+
|
|
116
|
+
### Every other Plugin
|
|
117
|
+
|
|
118
|
+
| Name | Description | Published |
|
|
119
|
+
| ------------------------------------------ | --------------------------------------------------------------- | --------- |
|
|
120
|
+
| [access][url-access] | ACLs based on IPs, domains, email addrs, etc. | 2026 |
|
|
121
|
+
| [aliases][url-aliases] | Email aliases | 2026 |
|
|
122
|
+
| [bounce][url-bounce] | Many options for bounce processing | 2026 |
|
|
123
|
+
| [delay_deny][url-delay] | Delays all pre-DATA 'deny' results | 2026 |
|
|
124
|
+
| [dovecot][url-dovecot] | Recipient validation & SMTP AUTH against dovecot | 2025 |
|
|
125
|
+
| [headers][url-headers] | Inspect and verify various email headers | 2026 |
|
|
126
|
+
| [Limit][url-limit] | Apply many types of limits to SMTP connections | 2025 |
|
|
127
|
+
| [prevent_credential_leaks][url-creds] | Prevent users from emailing their credentials | 2026 |
|
|
128
|
+
| [redis][url-redis] | multi-purpose Redis db connection(s) | 2025 |
|
|
129
|
+
| [relay][url-relay] | Manage relay permissions | 2026 |
|
|
130
|
+
| [reseed_rng][url-rng] | Reseed the RNG | 2026 |
|
|
131
|
+
| [batv-srs][url-batv] | BATV & SRS | 2020 |
|
|
132
|
+
| [srs][url-srs] | Sender Rewriting Scheme | — |
|
|
133
|
+
| [tarpit][url-tarpit] | Slow down connections | 2026 |
|
|
134
|
+
| [tls][url-tls] | Implements TLS | 2026 |
|
|
135
|
+
| [toobusy][url-toobusy] | Defers connections when too busy | 2026 |
|
|
136
|
+
| [xclient][url-xclient] | Implements XCLIENT | 2026 |
|
|
137
|
+
| [save-sent][url-save-sent] | Save sent emails on the serverside to a mailbox of the sender | — |
|
|
138
|
+
| [dropbox][url-dropbox] | Forward incoming emails to configured Dropbox webhook URLs. | — |
|
|
139
|
+
|
|
140
|
+
<!-- URLs tucked safely out of the way -->
|
|
141
|
+
|
|
142
|
+
[write-plugin]: https://github.com/haraka/Haraka/wiki/Write-a-Plugin
|
|
143
|
+
[plugins-doc]: https://haraka.github.io/core/Plugins
|
|
144
|
+
[url-access]: https://github.com/haraka/haraka-plugin-access
|
|
145
|
+
[url-acc-files]: https://github.com/acharkizakaria/haraka-plugin-accounting-files/blob/master/README.md
|
|
146
|
+
[url-action-mailbox]: https://guides.rubyonrails.org/action_mailbox_basics.html
|
|
147
|
+
[url-aliases]: https://github.com/haraka/Haraka/blob/master/docs/plugins/aliases.md
|
|
148
|
+
[url-asn]: https://github.com/haraka/haraka-plugin-asn
|
|
149
|
+
[url-attach]: https://github.com/haraka/haraka-plugin-attachment
|
|
150
|
+
[url-authencflat]: https://github.com/AuspeXeu/haraka-plugin-auth-enc-file
|
|
151
|
+
[url-authflat]: https://github.com/haraka/Haraka/blob/master/docs/plugins/auth/flat_file.md
|
|
152
|
+
[url-authbridge]: https://github.com/haraka/Haraka/blob/master/docs/plugins/auth/auth_bridge.md
|
|
153
|
+
[url-auth-imap]: https://github.com/haraka/haraka-plugin-auth-imap
|
|
154
|
+
[url-auth-ldap]: https://github.com/haraka/haraka-plugin-auth-ldap
|
|
155
|
+
[url-authproxy]: https://github.com/haraka/Haraka/blob/master/docs/plugins/auth/auth_proxy.md
|
|
156
|
+
[url-authvpop]: https://github.com/haraka/Haraka/blob/master/docs/plugins/auth/auth_vpopmaild.md
|
|
157
|
+
[url-avg]: https://github.com/haraka/haraka-plugin-avg
|
|
158
|
+
[url-batv]: https://www.npmjs.com/package/haraka-plugin-batv
|
|
159
|
+
[url-scatter]: https://github.com/haraka/Haraka/blob/master/docs/plugins/backscatterer.md
|
|
160
|
+
[url-blockme]: https://github.com/haraka/Haraka/blob/master/docs/plugins/block_me.md
|
|
161
|
+
[url-bounce]: https://www.npmjs.com/package/haraka-plugin-bounce
|
|
162
|
+
[url-clamd]: https://github.com/haraka/haraka-plugin-clamd
|
|
163
|
+
[url-dovecot]: https://github.com/haraka/haraka-plugin-dovecot
|
|
164
|
+
[url-fcrdns]: https://github.com/haraka/haraka-plugin-fcrdns
|
|
165
|
+
[url-p0f]: https://github.com/haraka/haraka-plugin-p0f
|
|
166
|
+
[url-headers]: https://github.com/haraka/haraka-plugin-headers
|
|
167
|
+
[url-sigs]: https://github.com/haraka/Haraka/blob/master/docs/plugins/data.signatures.md
|
|
168
|
+
[url-uribl]: https://github.com/haraka/haraka-plugin-uribl
|
|
169
|
+
[url-dcc]: https://github.com/haraka/haraka-plugin-dcc
|
|
170
|
+
[url-delay]: https://github.com/haraka/Haraka/blob/master/docs/plugins/delay_deny.md
|
|
171
|
+
[url-dkim]: https://github.com/haraka/haraka-plugin-dkim
|
|
172
|
+
[url-opendkim]: https://www.npmjs.com/package/haraka-plugin-opendkim
|
|
173
|
+
[url-dns-list]: https://github.com/haraka/haraka-plugin-dns-list
|
|
174
|
+
[url-early]: https://github.com/haraka/Haraka/blob/master/docs/plugins/early_talker.md
|
|
175
|
+
[url-esets]: https://github.com/haraka/haraka-plugin-esets
|
|
176
|
+
[url-geoip]: https://github.com/haraka/haraka-plugin-geoip
|
|
177
|
+
[url-graph]: https://github.com/haraka/haraka-plugin-graph
|
|
178
|
+
[url-greylist]: https://github.com/haraka/haraka-plugin-greylist
|
|
179
|
+
[url-helo]: https://github.com/haraka/haraka-plugin-helo.checks
|
|
180
|
+
[url-karma]: https://github.com/haraka/haraka-plugin-karma
|
|
181
|
+
[url-known-senders]: https://github.com/haraka/haraka-plugin-known-senders
|
|
182
|
+
[url-elastic]: https://github.com/haraka/haraka-plugin-elasticsearch/
|
|
183
|
+
[url-syslog]: https://github.com/haraka/haraka-plugin-syslog
|
|
184
|
+
[url-ldap]: https://github.com/haraka/haraka-plugin-ldap
|
|
185
|
+
[url-limit]: https://github.com/haraka/haraka-plugin-limit
|
|
186
|
+
[url-logreader]: https://github.com/haraka/haraka-plugin-log-reader
|
|
187
|
+
[url-milter]: https://github.com/haraka/haraka-plugin-milter
|
|
188
|
+
[url-mfres]: https://github.com/haraka/haraka-plugin-mail_from.is_resolvable
|
|
189
|
+
[url-msgsniff]: https://github.com/haraka/haraka-plugin-messagesniffer
|
|
190
|
+
[url-ms]: http://www.armresearch.com/Products/
|
|
191
|
+
[url-creds]: https://github.com/haraka/Haraka/blob/master/docs/plugins/prevent_credential_leaks.md
|
|
192
|
+
[url-postgres]: https://github.com/haraka/haraka-plugin-rcpt-postgresql
|
|
193
|
+
[url-proctitle]: https://github.com/haraka/Haraka/blob/master/docs/plugins/process_title.md
|
|
194
|
+
[url-qdisc]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/discard.md
|
|
195
|
+
[url-qlmtp]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/lmtp.md
|
|
196
|
+
[url-qmail]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/qmail-queue.md
|
|
197
|
+
[url-qquart]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/quarantine.md
|
|
198
|
+
[url-qrabbit]: https://github.com/haraka/haraka-plugin-queue-rabbitmq
|
|
199
|
+
[url-qbridge]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/smtp_bridge.md
|
|
200
|
+
[url-qforward]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/smtp_forward.md
|
|
201
|
+
[url-qproxy]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/smtp_proxy.md
|
|
202
|
+
[url-qrails]: https://github.com/mailprotector/haraka-plugin-queue-rails
|
|
203
|
+
[url-redis]: https://github.com/haraka/haraka-plugin-redis
|
|
204
|
+
[url-rhost]: https://github.com/haraka/Haraka/blob/master/docs/plugins/rcpt_to.in_host_list.md
|
|
205
|
+
[url-rcpt-ldap]: https://github.com/haraka/haraka-plugin-rcpt-ldap
|
|
206
|
+
[url-rqmd]: https://github.com/haraka/haraka-plugin-qmail-deliverable
|
|
207
|
+
[url-rroutes]: https://github.com/haraka/haraka-plugin-recipient-routes
|
|
208
|
+
[url-recordenv]: https://github.com/haraka/Haraka/blob/master/docs/plugins/record_envelope_addresses.md
|
|
209
|
+
[url-relay]: https://github.com/haraka/haraka-plugin-relay
|
|
210
|
+
[url-rng]: https://github.com/haraka/Haraka/blob/master/docs/plugins/reseed_rng.md
|
|
211
|
+
[url-rspamd]: https://github.com/haraka/haraka-plugin-rspamd
|
|
212
|
+
[url-spamass]: https://github.com/haraka/haraka-plugin-spamassassin
|
|
213
|
+
[url-spf]: https://github.com/haraka/haraka-plugin-spf
|
|
214
|
+
[url-srs]: https://github.com/swerter/haraka-plugins/blob/master/plugins/srs.js
|
|
215
|
+
[url-tarpit]: https://github.com/haraka/Haraka/blob/master/docs/plugins/tarpit.md
|
|
216
|
+
[url-tls]: https://github.com/haraka/Haraka/blob/master/docs/plugins/tls.md
|
|
217
|
+
[url-toobusy]: https://github.com/haraka/Haraka/blob/master/docs/plugins/toobusy.md
|
|
218
|
+
[url-vmta]: https://github.com/haraka/haraka-plugin-vmta/blob/master/README.md
|
|
219
|
+
[url-watch]: https://github.com/haraka/haraka-plugin-watch
|
|
220
|
+
[url-wildduck]: https://github.com/nodemailer/haraka-plugin-wildduck
|
|
221
|
+
[url-xclient]: https://github.com/haraka/Haraka/blob/master/docs/plugins/xclient.md
|
|
222
|
+
[mongo-url]: https://github.com/Helpmonks/haraka-plugin-mongodb
|
|
223
|
+
[url-outbound-logger]: https://github.com/mr-karan/haraka-plugin-outbound-logger
|
|
224
|
+
[url-kafka]: https://github.com/benjamonnguyen/haraka-plugin-queue-kafka
|
|
225
|
+
[url-mailauth]: https://www.npmjs.com/package/haraka-plugin-mailauth
|
|
226
|
+
[url-save-sent]: https://github.com/AprilGrimoire/haraka-plugin-save-sent
|
|
227
|
+
[url-dropbox]: https://github.com/dspangenberg/haraka-plugin-dropbox
|