haraka 0.0.33 → 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.
Files changed (309) hide show
  1. package/.claude/settings.local.json +28 -0
  2. package/.githooks/pre-commit +41 -0
  3. package/.prettierignore +6 -0
  4. package/.qlty/.gitignore +7 -0
  5. package/.qlty/configs/.shellcheckrc +1 -0
  6. package/.qlty/qlty.toml +15 -0
  7. package/CHANGELOG.md +1894 -0
  8. package/CLAUDE.md +40 -0
  9. package/CONTRIBUTORS.md +34 -0
  10. package/Dockerfile +50 -0
  11. package/GEMINI.md +38 -0
  12. package/LICENSE +22 -0
  13. package/Plugins.md +227 -0
  14. package/README.md +119 -4
  15. package/SECURITY.md +178 -0
  16. package/TODO +22 -0
  17. package/address.js +53 -0
  18. package/bin/haraka +593 -0
  19. package/bin/haraka_grep +32 -0
  20. package/config/aliases +2 -0
  21. package/config/auth_flat_file.ini +7 -0
  22. package/config/auth_vpopmaild.ini +9 -0
  23. package/config/connection.ini +79 -0
  24. package/config/delay_deny.ini +7 -0
  25. package/config/dhparams.pem +8 -0
  26. package/config/host_list +3 -0
  27. package/config/host_list_regex +6 -0
  28. package/config/http.ini +11 -0
  29. package/config/lmtp.ini +7 -0
  30. package/config/log.ini +11 -0
  31. package/config/me +1 -0
  32. package/config/outbound.bounce_message +18 -0
  33. package/config/outbound.bounce_message_html +36 -0
  34. package/config/outbound.bounce_message_image +106 -0
  35. package/config/outbound.ini +24 -0
  36. package/config/plugins +67 -0
  37. package/config/smtp.ini +37 -0
  38. package/config/smtp_bridge.ini +4 -0
  39. package/config/smtp_forward.ini +31 -0
  40. package/config/smtp_proxy.ini +27 -0
  41. package/config/tarpit.timeout +1 -0
  42. package/config/tls.ini +83 -0
  43. package/config/tls_cert.pem +23 -0
  44. package/config/tls_key.pem +28 -0
  45. package/config/watch.ini +12 -0
  46. package/config/xclient.hosts +2 -0
  47. package/connection.js +1863 -0
  48. package/contrib/Haraka.cf +6 -0
  49. package/contrib/Haraka.pm +35 -0
  50. package/contrib/bad_smtp_server.pl +25 -0
  51. package/contrib/bsd-rc.d/haraka +61 -0
  52. package/contrib/debian-init.d/haraka +87 -0
  53. package/contrib/haraka.init +96 -0
  54. package/contrib/haraka.service +23 -0
  55. package/contrib/plugin2npm.sh +81 -0
  56. package/contrib/ubuntu-upstart/haraka.conf +27 -0
  57. package/coverage/coverage-final.json +2 -0
  58. package/coverage/coverage-summary.json +33 -0
  59. package/coverage/tmp/coverage-79131-1779241025146-0.json +1 -0
  60. package/coverage/tmp/coverage-79132-1779240999690-0.json +1 -0
  61. package/coverage/tmp/coverage-79172-1779241000095-0.json +1 -0
  62. package/coverage/tmp/coverage-79210-1779241000156-0.json +1 -0
  63. package/coverage/tmp/coverage-79211-1779241000209-0.json +1 -0
  64. package/coverage/tmp/coverage-79212-1779241000266-0.json +1 -0
  65. package/coverage/tmp/coverage-79213-1779241000441-0.json +1 -0
  66. package/coverage/tmp/coverage-79214-1779241000626-0.json +1 -0
  67. package/coverage/tmp/coverage-79215-1779241000795-0.json +1 -0
  68. package/coverage/tmp/coverage-79216-1779241000965-0.json +1 -0
  69. package/coverage/tmp/coverage-79218-1779241001013-0.json +1 -0
  70. package/coverage/tmp/coverage-79219-1779241001179-0.json +1 -0
  71. package/coverage/tmp/coverage-79220-1779241006249-0.json +1 -0
  72. package/coverage/tmp/coverage-79227-1779241011453-0.json +1 -0
  73. package/coverage/tmp/coverage-79229-1779241011537-0.json +1 -0
  74. package/coverage/tmp/coverage-79230-1779241011647-0.json +1 -0
  75. package/coverage/tmp/coverage-79231-1779241011765-0.json +1 -0
  76. package/coverage/tmp/coverage-79232-1779241011841-0.json +1 -0
  77. package/coverage/tmp/coverage-79233-1779241011909-0.json +1 -0
  78. package/coverage/tmp/coverage-79234-1779241011984-0.json +1 -0
  79. package/coverage/tmp/coverage-79235-1779241012055-0.json +1 -0
  80. package/coverage/tmp/coverage-79236-1779241012230-0.json +1 -0
  81. package/coverage/tmp/coverage-79237-1779241012300-0.json +1 -0
  82. package/coverage/tmp/coverage-79238-1779241012368-0.json +1 -0
  83. package/coverage/tmp/coverage-79239-1779241012438-0.json +1 -0
  84. package/coverage/tmp/coverage-79240-1779241012511-0.json +1 -0
  85. package/coverage/tmp/coverage-79241-1779241012582-0.json +1 -0
  86. package/coverage/tmp/coverage-79242-1779241012652-0.json +1 -0
  87. package/coverage/tmp/coverage-79243-1779241012814-0.json +1 -0
  88. package/coverage/tmp/coverage-79244-1779241012931-0.json +1 -0
  89. package/coverage/tmp/coverage-79245-1779241013007-0.json +1 -0
  90. package/coverage/tmp/coverage-79246-1779241013106-0.json +1 -0
  91. package/coverage/tmp/coverage-79247-1779241013178-0.json +1 -0
  92. package/coverage/tmp/coverage-79248-1779241013244-0.json +1 -0
  93. package/coverage/tmp/coverage-79249-1779241013409-0.json +1 -0
  94. package/coverage/tmp/coverage-79250-1779241013697-0.json +1 -0
  95. package/coverage/tmp/coverage-79251-1779241013847-0.json +1 -0
  96. package/coverage/tmp/coverage-79252-1779241014288-0.json +1 -0
  97. package/coverage/tmp/coverage-79253-1779241014378-0.json +1 -0
  98. package/coverage/tmp/coverage-79254-1779241014428-0.json +1 -0
  99. package/coverage/tmp/coverage-79255-1779241021774-0.json +1 -0
  100. package/coverage/tmp/coverage-80382-1779241021949-0.json +1 -0
  101. package/coverage/tmp/coverage-80383-1779241025019-0.json +1 -0
  102. package/coverage/tmp/coverage-80384-1779241025133-0.json +1 -0
  103. package/docs/Body.md +1 -0
  104. package/docs/Config.md +1 -0
  105. package/docs/Connection.md +153 -0
  106. package/docs/CoreConfig.md +96 -0
  107. package/docs/CustomReturnCodes.md +3 -0
  108. package/docs/HAProxy.md +62 -0
  109. package/docs/Header.md +1 -0
  110. package/docs/Logging.md +129 -0
  111. package/docs/Outbound.md +210 -0
  112. package/docs/Plugins.md +372 -0
  113. package/docs/Results.md +7 -0
  114. package/docs/Transaction.md +135 -0
  115. package/docs/Tutorial.md +183 -0
  116. package/docs/deprecated/access.md +3 -0
  117. package/docs/deprecated/backscatterer.md +9 -0
  118. package/docs/deprecated/connect.rdns_access.md +53 -0
  119. package/docs/deprecated/data.headers.md +3 -0
  120. package/docs/deprecated/data.nomsgid.md +7 -0
  121. package/docs/deprecated/data.noreceived.md +11 -0
  122. package/docs/deprecated/data.rfc5322_header_checks.md +11 -0
  123. package/docs/deprecated/dkim_sign.md +97 -0
  124. package/docs/deprecated/dkim_verify.md +28 -0
  125. package/docs/deprecated/dnsbl.md +80 -0
  126. package/docs/deprecated/dnswl.md +73 -0
  127. package/docs/deprecated/lookup_rdns.strict.md +67 -0
  128. package/docs/deprecated/mail_from.access.md +52 -0
  129. package/docs/deprecated/mail_from.blocklist.md +18 -0
  130. package/docs/deprecated/mail_from.nobounces.md +8 -0
  131. package/docs/deprecated/rcpt_to.access.md +53 -0
  132. package/docs/deprecated/rcpt_to.blocklist.md +18 -0
  133. package/docs/deprecated/rcpt_to.routes.md +3 -0
  134. package/docs/deprecated/rdns.regexp.md +30 -0
  135. package/docs/plugins/aliases.md +3 -0
  136. package/docs/plugins/auth/auth_bridge.md +34 -0
  137. package/docs/plugins/auth/auth_ldap.md +4 -0
  138. package/docs/plugins/auth/auth_proxy.md +36 -0
  139. package/docs/plugins/auth/auth_vpopmaild.md +33 -0
  140. package/docs/plugins/auth/flat_file.md +40 -0
  141. package/docs/plugins/block_me.md +18 -0
  142. package/docs/plugins/data.signatures.md +11 -0
  143. package/docs/plugins/delay_deny.md +23 -0
  144. package/docs/plugins/max_unrecognized_commands.md +6 -0
  145. package/docs/plugins/prevent_credential_leaks.md +22 -0
  146. package/docs/plugins/process_title.md +42 -0
  147. package/docs/plugins/queue/deliver.md +3 -0
  148. package/docs/plugins/queue/discard.md +32 -0
  149. package/docs/plugins/queue/lmtp.md +24 -0
  150. package/docs/plugins/queue/qmail-queue.md +16 -0
  151. package/docs/plugins/queue/quarantine.md +87 -0
  152. package/docs/plugins/queue/smtp_bridge.md +32 -0
  153. package/docs/plugins/queue/smtp_forward.md +127 -0
  154. package/docs/plugins/queue/smtp_proxy.md +68 -0
  155. package/docs/plugins/queue/test.md +7 -0
  156. package/docs/plugins/rcpt_to.in_host_list.md +34 -0
  157. package/docs/plugins/rcpt_to.max_count.md +3 -0
  158. package/docs/plugins/record_envelope_addresses.md +20 -0
  159. package/docs/plugins/relay.md +3 -0
  160. package/docs/plugins/reseed_rng.md +16 -0
  161. package/docs/plugins/status.md +41 -0
  162. package/docs/plugins/tarpit.md +50 -0
  163. package/docs/plugins/tls.md +235 -0
  164. package/docs/plugins/toobusy.md +27 -0
  165. package/docs/plugins/xclient.md +10 -0
  166. package/docs/tutorials/Migrating_from_v1_to_v2.md +96 -0
  167. package/docs/tutorials/SettingUpOutbound.md +62 -0
  168. package/eslint.config.mjs +2 -0
  169. package/haraka.js +74 -0
  170. package/haraka.sh +2 -0
  171. package/http/html/404.html +58 -0
  172. package/http/html/index.html +47 -0
  173. package/http/package.json +21 -0
  174. package/line_socket.js +24 -0
  175. package/logger.js +322 -0
  176. package/outbound/client_pool.js +59 -0
  177. package/outbound/config.js +134 -0
  178. package/outbound/hmail.js +1504 -0
  179. package/outbound/index.js +349 -0
  180. package/outbound/qfile.js +93 -0
  181. package/outbound/queue.js +399 -0
  182. package/outbound/tls.js +85 -0
  183. package/outbound/todo.js +17 -0
  184. package/package.json +99 -4
  185. package/plugins/.eslintrc.yaml +3 -0
  186. package/plugins/auth/auth_base.js +261 -0
  187. package/plugins/auth/auth_bridge.js +20 -0
  188. package/plugins/auth/auth_proxy.js +227 -0
  189. package/plugins/auth/auth_vpopmaild.js +162 -0
  190. package/plugins/auth/flat_file.js +44 -0
  191. package/plugins/block_me.js +88 -0
  192. package/plugins/data.signatures.js +30 -0
  193. package/plugins/delay_deny.js +153 -0
  194. package/plugins/prevent_credential_leaks.js +61 -0
  195. package/plugins/process_title.js +197 -0
  196. package/plugins/profile.js +11 -0
  197. package/plugins/queue/deliver.js +12 -0
  198. package/plugins/queue/discard.js +27 -0
  199. package/plugins/queue/lmtp.js +45 -0
  200. package/plugins/queue/qmail-queue.js +93 -0
  201. package/plugins/queue/quarantine.js +133 -0
  202. package/plugins/queue/smtp_bridge.js +45 -0
  203. package/plugins/queue/smtp_forward.js +371 -0
  204. package/plugins/queue/smtp_proxy.js +142 -0
  205. package/plugins/queue/test.js +15 -0
  206. package/plugins/rcpt_to.host_list_base.js +65 -0
  207. package/plugins/rcpt_to.in_host_list.js +56 -0
  208. package/plugins/record_envelope_addresses.js +17 -0
  209. package/plugins/reseed_rng.js +7 -0
  210. package/plugins/status.js +274 -0
  211. package/plugins/tarpit.js +45 -0
  212. package/plugins/tls.js +164 -0
  213. package/plugins/toobusy.js +47 -0
  214. package/plugins/xclient.js +124 -0
  215. package/plugins.js +604 -0
  216. package/queue/1772642154987_1775581346001_4_82235_TGwgfd_2_mattbook-m3.home.simerson.net +0 -0
  217. package/run_tests +11 -0
  218. package/server.js +827 -0
  219. package/smtp_client.js +504 -0
  220. package/test/.eslintrc.yaml +11 -0
  221. package/test/config/auth_flat_file.ini +5 -0
  222. package/test/config/block_me.recipient +1 -0
  223. package/test/config/block_me.senders +1 -0
  224. package/test/config/dhparams.pem +8 -0
  225. package/test/config/host_list +2 -0
  226. package/test/config/outbound_tls_cert.pem +1 -0
  227. package/test/config/outbound_tls_key.pem +1 -0
  228. package/test/config/plugins +7 -0
  229. package/test/config/smtp.ini +11 -0
  230. package/test/config/smtp_forward.ini +30 -0
  231. package/test/config/tls/example.com/_.example.com.key +28 -0
  232. package/test/config/tls/example.com/example.com.crt +25 -0
  233. package/test/config/tls/haraka.local.pem +51 -0
  234. package/test/config/tls.ini +45 -0
  235. package/test/config/tls_cert.pem +21 -0
  236. package/test/config/tls_key.pem +28 -0
  237. package/test/connection.js +817 -0
  238. package/test/fixtures/haproxy_allowed/config/connection.ini +3 -0
  239. package/test/fixtures/haproxy_disabled/config/connection.ini +3 -0
  240. package/test/fixtures/haproxy_untrusted/config/connection.ini +3 -0
  241. package/test/fixtures/line_socket.js +21 -0
  242. package/test/fixtures/todo_qfile.txt +0 -0
  243. package/test/fixtures/util_hmailitem.js +156 -0
  244. package/test/installation/config/test-plugin-flat +1 -0
  245. package/test/installation/config/test-plugin.ini +10 -0
  246. package/test/installation/config/tls.ini +1 -0
  247. package/test/installation/node_modules/load_first/index.js +5 -0
  248. package/test/installation/node_modules/load_first/package.json +11 -0
  249. package/test/installation/node_modules/test-plugin/config/test-plugin-flat +1 -0
  250. package/test/installation/node_modules/test-plugin/config/test-plugin.ini +9 -0
  251. package/test/installation/node_modules/test-plugin/package.json +5 -0
  252. package/test/installation/node_modules/test-plugin/test-plugin.js +5 -0
  253. package/test/installation/plugins/base_plugin.js +3 -0
  254. package/test/installation/plugins/folder_plugin/index.js +3 -0
  255. package/test/installation/plugins/folder_plugin/package.json +11 -0
  256. package/test/installation/plugins/inherits.js +7 -0
  257. package/test/installation/plugins/load_first.js +3 -0
  258. package/test/installation/plugins/plugin.js +1 -0
  259. package/test/installation/plugins/tls.js +3 -0
  260. package/test/logger.js +217 -0
  261. package/test/loud/config/dhparams.pem +0 -0
  262. package/test/loud/config/tls/goobered.pem +45 -0
  263. package/test/loud/config/tls.ini +43 -0
  264. package/test/mail_specimen/base64-root-part.txt +23 -0
  265. package/test/mail_specimen/varied-fold-lengths-preserve-data.txt +283 -0
  266. package/test/outbound/bounce_net_errors.js +133 -0
  267. package/test/outbound/bounce_rfc3464.js +226 -0
  268. package/test/outbound/hmail.js +210 -0
  269. package/test/outbound/index.js +385 -0
  270. package/test/outbound/qfile.js +124 -0
  271. package/test/outbound/queue.js +325 -0
  272. package/test/plugins/auth/auth_base.js +620 -0
  273. package/test/plugins/auth/auth_bridge.js +80 -0
  274. package/test/plugins/auth/auth_vpopmaild.js +81 -0
  275. package/test/plugins/auth/flat_file.js +123 -0
  276. package/test/plugins/block_me.js +141 -0
  277. package/test/plugins/data.signatures.js +111 -0
  278. package/test/plugins/delay_deny.js +262 -0
  279. package/test/plugins/prevent_credential_leaks.js +174 -0
  280. package/test/plugins/process_title.js +141 -0
  281. package/test/plugins/queue/deliver.js +98 -0
  282. package/test/plugins/queue/discard.js +78 -0
  283. package/test/plugins/queue/lmtp.js +137 -0
  284. package/test/plugins/queue/qmail-queue.js +98 -0
  285. package/test/plugins/queue/quarantine.js +80 -0
  286. package/test/plugins/queue/smtp_bridge.js +152 -0
  287. package/test/plugins/queue/smtp_forward.js +1023 -0
  288. package/test/plugins/queue/smtp_proxy.js +138 -0
  289. package/test/plugins/rcpt_to.host_list_base.js +102 -0
  290. package/test/plugins/rcpt_to.in_host_list.js +186 -0
  291. package/test/plugins/record_envelope_addresses.js +66 -0
  292. package/test/plugins/reseed_rng.js +34 -0
  293. package/test/plugins/status.js +207 -0
  294. package/test/plugins/tarpit.js +90 -0
  295. package/test/plugins/tls.js +86 -0
  296. package/test/plugins/toobusy.js +21 -0
  297. package/test/plugins/xclient.js +119 -0
  298. package/test/plugins.js +230 -0
  299. package/test/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_fixed +0 -0
  300. package/test/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_haraka +0 -0
  301. package/test/queue/1508269674999_1508269674999_0_34002_socVUF_1_haraka +0 -0
  302. package/test/queue/1508455115683_1508455115683_0_90253_9Q4o4V_1_haraka +0 -0
  303. package/test/queue/zero-length +0 -0
  304. package/test/server.js +1012 -0
  305. package/test/smtp_client.js +1303 -0
  306. package/test/tls_socket.js +321 -0
  307. package/test/transaction.js +554 -0
  308. package/tls_socket.js +771 -0
  309. package/transaction.js +267 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,1894 @@
1
+ # Changelog
2
+
3
+ The format is based on [Keep a Changelog](https://keepachangelog.com/).
4
+
5
+ ### Unreleased
6
+
7
+ ### [3.3.0] - 2026-06-03
8
+
9
+ - fix(haraka): wrap util.createFile in a try
10
+ - fix(conn): update local and remote results after proxy #3593
11
+ - feat(conn): add main.postel option #3592
12
+ - change: log when MFROM or RCPT fail to parse #3581
13
+ - feat: proxy support for smtps (465) #3577
14
+ - refactor(auth_proxy): use net_utils.endpoint #3584
15
+ - refactor: move endpoint, HostPool, LineSocket to net-utils #3583
16
+ - refactor: move rfc1869, FsyncWriteStream, TimerQueue to haraka-utils #3585
17
+ - refactor: move cram_md5_response to haraka-utils #3585
18
+ - dep(many): bump to latest #3587
19
+ - dep(eslint): update @haraka/eslint-config to v3, #3586
20
+ - dep(haraka-utils): ~2.1.1 for position-aware MAIL/RCPT address errors
21
+ - build: add qlty config and README badge #3588
22
+ - test: update to test-fixtures 1.7.0 helpers #3589
23
+
24
+ ### [3.2.1] - 2026-05-24
25
+
26
+ - fix(deps): update rspamd, dkim plugins to latest #3576
27
+
28
+ ### [3.2.0] - 2026-05-24
29
+
30
+ - fix(status): merge worker status into summary #3574
31
+ - dep: replace address-rfc282{1,2} with @haraka/email-address #3566
32
+ - change(BREAKING for some plugins), see https://github.com/haraka/Haraka/issues/3564
33
+
34
+ ### [3.1.7] - 2026-05-19
35
+
36
+ - feat(smtp_forward,smtp_proxy): honor `tls.ini` `[main]` and plugin `[tls]`
37
+ section for backend STARTTLS (matches docs). Behavior change: installs
38
+ that set `[main] rejectUnauthorized=true` in `tls.ini` will now see it applied
39
+ to the forward/proxy paths. Untouched installs match the previous behavior.
40
+ - fix(auth_proxy): try opportunistic STARTTLS w/o a key/cert, #matchTheDocs
41
+ - feat(tls_socket): new `load_plugin_tls_options(plugin_tls_cfg)` helper that
42
+ merges a plugin's `[tls]` section over `tls.ini` `[main]` for client STARTTLS
43
+ - refactor: `outbound/tls.js#load_config()` delegates to `load_plugin_tls_options()`
44
+ - change: update DSN.addr_bad_dest_system(...) to DSN.addr_null_mx(...)
45
+ - fix(tls): buffer discard on STARTTLS (RFC 3207 §4)
46
+ - fix(server): run the graceful restart/shutdown work queue
47
+ - fix(xclient): parse DESTPORT to int so the 587/465 auth check applies
48
+ - fix(smtp_client):
49
+ - no_tls_hosts works correctly by referencing the correct path
50
+ - unsupported AUTH no longer throws out of the event loop
51
+ - fix(smtputf8): all code paths use it, no more smtp_utf8
52
+ - fix(conn): reject control chars in HELO name (RFC 5321 §4.1.1.1)
53
+ - fix: sanitize AUTH usernames before storing
54
+ - fix: strip CR/LF from all strings passed into `auth_results()`
55
+ - fix(smtp_client,auth_proxy): redact AUTH credentials in protocol logs
56
+ - fix(prevent_credential_leaks): properly handle usernames w/o an `@`
57
+ - fix(queue/qmail-queue): size envelope dynamically; UTF-8 safe
58
+ - deps(some): bump patch versions to latest
59
+ - change: replace forEach with es6 style for...of #3569
60
+ - tests: add a few #3568
61
+ - doc(Plugins): add publish year to each plugin #3567
62
+ - deps(all): switch from ^ to ~ version ranges #3565
63
+
64
+ ### [3.1.6] - 2026-05-15
65
+
66
+ - fix(outbound): release queue slot when qfile unreadable #3561
67
+ - fix(message-stream): add `unpipe` for pipe cleanup after errors
68
+ - fix(outbound): guard against error emit after listeners removed #3554
69
+ - fix(outbound): yield before delivery attempts #3552
70
+ - test(outbound,conn,endpoint,server,tls_socket): added tests #3552
71
+ - deps(various): updated to latest
72
+ - dep(ocsp): replaced fork with local (more maintained) fork #3550
73
+ - dep(npid, sockaddr): removed #3550
74
+ - dep(daemon): removed, unmaintained #3550
75
+ - doc(SECURITY): added threat model #3557
76
+ - doc(SECURITY): added #3550
77
+ - doc(Connection): added 15 undocumented methods
78
+ - doc: add a fresh coat of paint to README and docs/*
79
+ - add missing properties and functions
80
+ - sync with codebase, fix inaccuracies, and add examples
81
+ - improve formatting and readability
82
+ - package.json: remove optional lesser used plugins #3550
83
+ - avg, elasticsearch, esets, p0f, recip-routes, watch
84
+
85
+ ### [3.1.5] - 2026-04-02
86
+
87
+ - fix(smtp_forward): update AUTH to match WHATWG URL API #3546
88
+ - fix(smtp_forward): queue hook now calls next() after delivery
89
+ — see haraka/message-stream#17
90
+ - deps(all): bump versions to latest
91
+ - test: refactor server, use smtp_client for all tests #3548
92
+ - test runner is now node --test #3547
93
+ - test(smtp_client, tls_socket, smtp_forward): 95% coverage #3546
94
+ - ci: added explicit minimal permissions
95
+
96
+ ### [3.1.4] - 2026-03-30
97
+
98
+ #### Fixed
99
+
100
+ - fix: add ensure_body for late parse_body=true #3539
101
+ - fix(outbound): prevent ERR_UNHANDLED_ERROR crash #3538
102
+ - fix(txn): more robust handling of body filter additions #3537
103
+ - fix(conn): avoid connection fault when 2x QUIT sent #3536
104
+ - fix(txn): more robust handling of broken messages #3535
105
+ - fix(connection): pause after odd SMTP command sequence #3525
106
+
107
+ #### Changed
108
+
109
+ - sunset: remove dot_stuffing (now dot_stuffed)
110
+ - chore(plugins): deleted deprecated core_require
111
+ - dep(rabbitmq): repackaged as NPM module #3526
112
+ - deps(all): bump versions
113
+ - doc(Plugins): add sections filter, enrichment, and logging #3534
114
+ - added dropbox-plugin #3543
115
+ - es2024: #3527, #3528
116
+ - outbound replace fs callback with promises and async/await #3528
117
+ - dep(async): remove dep by replacing async.map with Queue
118
+ - use startsWith instead of indexOf === 0
119
+ - use spread syntax instead of [].concat and {}.assign
120
+ - use implicit arrow function returns
121
+ - replace deprecated substr with slice or substring
122
+ - test: fixes for test-fixtures 1.4 & local plugins that do require('./')
123
+ - outbound/queue: added tests #3531
124
+ - TL;DR: bundled plugins don't need a special require any more
125
+ - fixtures/plugin behaves more like real one, test accordingly
126
+ - refactored connection, transaction, and outbound to `node --test` #3541
127
+ - transaction.js (48 → 62 tests)
128
+ - connection.js (24 → 51 tests)
129
+ - moved ./test/outbound_* to ./test/outbound/, and fixed race conditions
130
+ - move TLS tests to haraka-tls #3542
131
+ - improve coverage for transaction, rfc1869, xclient, and record_envelope_addresses #3524
132
+
133
+ ### [3.1.3] - 2026-02-06
134
+
135
+ - deps(graph): removed, sqlite3 library is unmaintained
136
+ - deps: bump all to latest
137
+ - outbound: fix aggregate error path #3519
138
+ - doc: fix no plugin names displayed with haraka --order #3517
139
+ - haraka: fixed getHooks regex to grab only hook names
140
+ - config: spool_dir and spool_after belong in connection.ini
141
+
142
+ ### [3.1.2] - 2026-01-02
143
+
144
+ - smtp_forward: [domain selector] : user + domain #3501
145
+ - rspamd: revert to older plugin version #3493
146
+ - feat: push to a 'release' branch with package-lock.json #3474
147
+ - change: finish renaming dot_stuffing to dot_stuffed #3473
148
+ - deps: require node 20+
149
+ - deps: bump all deps to latest
150
+ - deps: bump message-stream to 1.3.0, add some missing ^ chars
151
+ - dep(tmp): deleted, only used in attachment plugin
152
+ - feat(outbound): configurable outbound IPv4/IPv6 preference using `inet_prefer`
153
+ - feat(outbound): deferred hook is now passed the failed recips and mx #3505
154
+ - feat(rabbitmq_amqplib): configurable optional exchange arguments #3472
155
+ - feat(rabbitmq_amqplib): configurable message priority #3472
156
+ - fix: auth_proxy TLS upgrade works again #3514
157
+ - doc(Plugins): add save-sent #3497
158
+ - doc(README): update DKIM plugin link, #3490
159
+ - style: run prettier in repo #3504
160
+
161
+ ### [3.1.1] - 2025-05-19
162
+
163
+ - Fix: install connection.ini with base configuration on install #3458
164
+ - fix(outbound): in outbound, fix a crash when socket connection errors #3456
165
+
166
+ ### [3.1.0] - 2025-01-30
167
+
168
+ #### Changes
169
+
170
+ ##### BREAKING CHANGE
171
+
172
+ `connection.ini` replaces the following config files:
173
+
174
+ | old file | connection.ini setting |
175
+ | ------------------------ | ---------------------- |
176
+ | haproxy_hosts | [haproxy] hosts |
177
+ | smtpgreeting | [message] greeting |
178
+ | ehlo_hello_message | [message] helo |
179
+ | connection_close_message | [message] close |
180
+ | banner_includes_uuid | [uuid] banner_chars |
181
+ | deny_includes_uuid | [uuid] deny_chars |
182
+ | databytes | [max] bytes |
183
+ | max_mime_parts | [max] mime_parts |
184
+ | max_line_length | [max] line_length |
185
+ | max_data_line_length | [max] data_line_length |
186
+
187
+ AND
188
+
189
+ - moves the following settings from smtp.ini to connection.ini:
190
+ - headers.\*
191
+ - main.smtputf8
192
+ - main.strict_rfc1869
193
+ - early_talker.pause, removed support, use earlytalker.ini
194
+
195
+ To upgrade, apply any localized settings from the old config files to
196
+ the new `connection.ini` file. For tidiness, delete the deprecated
197
+ config files.
198
+
199
+ - feat(queue/test): Append UUID to E-Mails (avoid overwrite) #3449
200
+ - repackage p/early_talker as plugin #3443
201
+ - repackage p/mail_from.is_resolvable as plugin #3439
202
+ - repackage p/relay as haraka-plugin-relay #3432
203
+ - ci(cov): update codecov to v5
204
+ - deps(eslint): update to v9 #3433
205
+ - doc(plugins/\*.md): use \# to indicate heading levels
206
+ - deps(various): bump to latest versions
207
+ - doc(CoreConfig): removed incorrect early_talker.delay reference (hasn't worked in years).
208
+ - doc(LICENSE) fix copyright year #3424
209
+ - doc(access, backscatterer, & data.headers): deprecated plugin docs
210
+
211
+ #### Fixes
212
+
213
+ - fix(conn): always add connection.notes.tls properties #3450
214
+ - fix(conn): cumulative greeting message for custom greetings #3446
215
+ - fix(mail_from.is_resolvable): use correct config var path #3416
216
+ - fix(bin/haraka): fix for finding path to config/docs/Plugins.md #3414
217
+ - fix(outbound): in outbound, when mx.exchange contains an IP, use mx.from_dns #3413
218
+
219
+ ### [3.0.5] - 2024-09-27
220
+
221
+ #### Fixed
222
+
223
+ - fix(q/lmtp): revert a refactoring error #3407
224
+ - fix: install Plugins.md when haraka -i #3406
225
+ - fix(haraka -h): add missing return for plugin list #3405
226
+ - fix `no_tls_hosts` related docs & tests #3404
227
+ - fix: install docs/Plugins.md when haraka -i installed
228
+ - fix(changes): spelling correction #3397
229
+
230
+ #### Changed
231
+
232
+ - lint: remove deprecated semi-style rule
233
+ - removed dependency on ldap plugins #3399
234
+ - doc(tls.md): add note for no_tls_hosts for outbound
235
+ - test(tls): add tests for no_tls_hosts for inbound & outbound
236
+ - dep version bumps:
237
+ - haraka-email-message: 1.2.4, #3408
238
+ - nodemailer: 6.9.15
239
+ - nopt: 8.0.0
240
+ - tld: 1.2.2
241
+ - plugin-dkim: 1.0.7
242
+ - plugin-dns-list: 1.2.1
243
+ - plugin-elastisearch: 8.0.3
244
+ - test-fixtures: 1.3.8
245
+
246
+ ### [3.0.4] - 2024-08-21
247
+
248
+ #### Added
249
+
250
+ - doc: add CONTRIBUTORS #3312
251
+ - tls_socket: `config/tls` dir loading is now recursive
252
+
253
+ #### Changed
254
+
255
+ - prefix node libs with 'node:' #3359
256
+ - .gitignore: add config/me and config/\*.pem
257
+ - auth_base: enable disabling constrain_sender at runtime #3298
258
+ - auth_base: skip constrain_sender when auth user has no domain #3319
259
+ - avg: repackaged as NPM module #3347
260
+ - bounce: repackaged plugin as NPM module #3341
261
+ - clamd: repackaged plugin as NPM module
262
+ - config/plugins: consistent formatting #3359
263
+ - connection: check remote is connected before queue #3338
264
+ - improve log message for queue\* hooks, fixes #2998
265
+ - support IPv6 when setting remote.is_private #3295
266
+ - in setTLS, replace forEach with for...of
267
+ - NOTE: remove a handful of 3.0 sunset property names #3315
268
+ - contrib/plugin2npm.sh: fix path to package.json #3359
269
+ - deps: bump all versions to latest #3303, #3344, #3391
270
+ - dkim: repackaged as NPM module #3311
271
+ - esets: repackaged as NPM module #3353
272
+ - greylist: repackaged as NPM module
273
+ - helo.checks: require a successful HELO/EHLO #3352
274
+ - new NPM plugin dns-list, repackages dnsbl, dnswl, backscatterer #3313
275
+ - when using message-stream, don't send default options #3290
276
+ - rcpt_to.host_list: add connection ID to log messages #3322
277
+ - line_socket: remove unused callback #3344
278
+ - logger: don't load outbound (race condition). Instead, set name property #3322
279
+ - logger: extend add_log_methods to Classes (connection, plugins, hmail) #3322
280
+ - logger: when logging via `logger` methods, use short names #3322
281
+ - logger: check Object.hasOwn to avoid circular deps
282
+ - mail_from.resolvable: refactored, leaning on improved net_utils #3322
283
+ - fixes haraka/haraka-net-utils#88
284
+ - messagesniffer: repackaged as NPM module
285
+ - outbound
286
+ - check for local_mx only when default route is used #3307
287
+ - client_pool: use tls_socket directly (shed line_socket)
288
+ - client_pool: sock.name is now JSON of socket args
289
+ - client_pool.get_client & release_client: arity of 5 -> 2
290
+ - mx_lookup: make it async/await
291
+ - mx_lookup: deleted. Logic moved into net_utils #3322
292
+ - use net_utils.HarakaMx for get_mx parsing #3344
293
+ - emit log message when ignoring local MX #3285
294
+ - pass in config when initiating txn #3315
295
+ - minor es6 updates #3315, #3322
296
+ - logging improvements #3322
297
+ - was: [-] [core] [outbound] Failed to get socket: Outbound connection error: Error: connect ECONNREFUSED 172.16.16.14:25
298
+ - now: [A63B62DF-F3B8-4096-8996-8CE83494A188.1.1] [outbound] Failed to get socket: connect ECONNREFUSED 172.16.16.14:25
299
+ - shorter logger syntax: logger.loginfo -> logger.info
300
+ - remove log prefixes of `[outbound] `, no longer needed
301
+ - delete try_deliver_host. Use net_utils to resolve MX hosts to IPs #3322
302
+ - remove config setting ipv6_enabled #3322
303
+ - remove undocumented use of send_email with arity of 2. #3322
304
+ - encapsulate force_tls logic into get_force_tls #3322
305
+ - es6(async/promise): pre_send_trans_email_respond, process_delivery
306
+ - queue/lmtp: refactored for DRY and improved readability #3322
307
+ - smtp_client: pass connect_timeout, maybe fixes #3281
308
+ - spamassassin: repackaged as NPM module #3348
309
+ - style(es6): more for...of loops
310
+ - deps: moved attachment, spf, & dkim into optional deps
311
+ - doc(Plugins.md): update registry
312
+ - doc(Outbound.md): improve GHFM formatting
313
+ - remove last vestiges of header_hide_version (long ago renamed)
314
+ - server.js: use the local logger methods
315
+ - es6(async): \_graceful, get_smtp_server, setup_smtp_listeners
316
+ - replace async.eachLimit with Promise.all batches
317
+ - status: replace async.map with Promise.allSettled
318
+ - get Haraka version from utils.getVersion (which includes git id if running from repo)
319
+ - tls_socket: remove secureConnection. Fixes #2743
320
+ - getSocketOpts is now async
321
+ - parse_x509 is now async
322
+ - shed dependency on caolin/async & openssl-wrapper
323
+ - get_certs_dir is now async
324
+ - completely refactored.
325
+ - transaction: init with conn.init_transaction, always pass in cfg #3315
326
+ - test: add a connection.response test case with DSN #3305
327
+ - test: convert test runner to mocha
328
+ - test: rename tests -> test (where test runner expect) #3340
329
+
330
+ #### Fixed
331
+
332
+ - fix(logger): refactor add_log_methods, don't set extra `loglog*` names
333
+ - doc(connection): update rfc7001 URL
334
+ - fix(bin/haraka): list NPM installed plugin #3310
335
+ - fix(bin/haraka): get hook list from doc/Plugins #3306
336
+ - fix(outbound): call cb even if no MX is found #3294
337
+ - fix(helo.checks): declare reject.literal_mismatch as boolean #3293
338
+ - fix(outbound): allow LHLO over insecure socket if TLS is forced #3278
339
+ - fix(outbound): include return path param SMTPUTF8 when required #3289
340
+ - fix(outbound): replace empty Message-ID header #3288
341
+ - fix(outbound): don't send SNI servername when connecting to an IP
342
+ - fix(outbound): chown queue dir after creation #3291
343
+ - fix(server): async endpoint.bind() and await in server.js #3366
344
+ - fix(outbound): get_mx DNS error handling #3376
345
+
346
+ ### [3.0.3] - 2024-02-07
347
+
348
+ #### Added
349
+
350
+ - feat(auth_vpopmaild): when outbound, assure the envelope domain matches AUTH domain #3265
351
+ - doc(Plugins.md): add pi-queue-kafka #3247
352
+ - feat(rabbitmq_amqplib): configurable optional queue arguments #3239
353
+ - feat(clamd): add x-haraka-virus header #3207
354
+
355
+ #### Fixed
356
+
357
+ - Fix: add empty string as param to .join() on bounce. #3237
358
+ - Update links in documentation #3234
359
+ - fix(ob/hmail):Add filename to the error for easy debugging
360
+ - fix(ob/queue): Ignore 'error.' prefixed files in the queue because corrupted
361
+
362
+ #### Changed
363
+
364
+ - docs(outbound): remove example of outbound_ip #3253
365
+ - transaction: simplify else condition in add_data #3252
366
+ - q/smtp_forward: always register get_mx hook #3204
367
+ - dep(pi-es): bump version to 8.0.2 #3206
368
+ - dep(redis): bump version to 4.6.7 #3193
369
+ - dep(pi-spf): bump version to 1.2.4
370
+ - dep(net-utils): bump version to 1.5.3
371
+ - dep(pi-redis): bump version to 2.0.6
372
+ - dep(tld): bump version to 1.2.0
373
+ - remove defunct config files: lookup_rdns.strict.ini, lookup_rdns.strict.timeout, lookup_rdns.strict.whitelist, lookup_rdns.strict.whitelist_regex, rcpt_to.blocklist, rdns.allow_regexps, rdns.deny_regexps
374
+
375
+ ### [3.0.2] - 2023-06-12
376
+
377
+ #### Fixed
378
+
379
+ - feat(q_forward): add LMTP routing handling #3199
380
+ - chore(q_forward): tighten up queue.wants handling #3199
381
+ - doc(q_forward): improve markdown formatting #3199
382
+ - helo.checks: several fixes, #3191
383
+ - q/smtp_forward: correct path to next_hop #3186
384
+ - don't leak addr parsing errors into SMTP conversation #3185
385
+ - connection: handle dns.reverse invalid throws on node v20 #3184
386
+ - rename redis command setex to setEx #3181
387
+
388
+ #### Changed
389
+
390
+ - test(helo.checks): add regression tests for #3191 #3195
391
+ - connection: handle dns.reverse invalid throws on node v20
392
+ - build(deps): bump ipaddr.js from 2.0.1 to 2.1.0 #3194
393
+ - chore: bump a few dependency versions #3184
394
+ - dns_list_base: avoid test failure when public DNS used #3184
395
+ - doc(outbound.ini) update link #3159
396
+ - doc(clamd.md) fixed spelling error #3155
397
+
398
+ ### [3.0.1] - 2023-01-19
399
+
400
+ #### Fixed
401
+
402
+ - fix(bin/haraka): set server.cfg and pass to conn, fixes #3143
403
+ - fix(bin/haraka): correct error messages for help options #3142
404
+ - fix: dkim_verify fails to find record #3149
405
+
406
+ #### Changed
407
+
408
+ - plugins: Add haraka-plugin-outbound-logger to registry #3146
409
+ - dep(pi-spf): bump version 1.1.3 to 1.2.0
410
+
411
+ ### [3.0.0] - 2022-12-17
412
+
413
+ #### Added
414
+
415
+ - feat: prevent local delivery loop when target exchange resolves to a local hostname #3002
416
+ - feat: format DKIM signature to multiline #2991
417
+
418
+ #### Fixed
419
+
420
+ - fix(tls): redis promise syntax for tls & ob/tls #3064
421
+ - fix(attachment): error handling with complex archive #3035
422
+ - fix(smtp_client): run "secured" once, fixes #3020
423
+ - fix(smtp_client): add missing `$` char in front of interpolated string
424
+ - fix(auth_proxy): run "secured" only once, improvement for #3022
425
+ - fix(helo): remove multi-check from should_skip #3041
426
+ - fix(outbound): outbound local mx check #3010
427
+ - fix(outbound): prevent delivery loop when target MX resolves to local hostname #3002
428
+ - fix(conn): socket can't be released when disconnect after DATA command #2994
429
+
430
+ #### Changed
431
+
432
+ - dep(generic-pool): remove pooling from outbound #3115
433
+ - smtp_client: disable pooling in get_client_plugin, #3113
434
+ - smtp_forward: restore ability to enable queue_outbound #3119
435
+ - ./mailbody & ./mailheader moved to haraka-email-message #3071
436
+ - config/plugins: update name of uribl plugin
437
+ - doc(queue.js) spelling & grammar improvement #3051
438
+ - doc(rails): add haraka-plugin-queue-rails #2995
439
+ - doc(smtp.ini): correct spelling of SMTPUTF8 #2993
440
+ - style(es6): use optional chaining when accessing transactions #2732
441
+ - style(smtp_client): pass args as objects (was positional)
442
+ - style(plugin/\*): transaction guarding #3032
443
+ - dep(spf): remove to separate plugin #3078
444
+ - dep(iconv): removed, declared in haraka-email-message)
445
+ - dep(haraka-plugin-redis)!: 1.0 -> 2.0 #3038
446
+ - dep(redis)!: 3.1 -> 4.1 #3058
447
+ - dep(generic-pool): remove pooling from outbound #3115
448
+ - smtp_client: remove smtp\_\* pooling support in #3113
449
+ - dep: bump plugin versions #3063
450
+ - dep: bump haraka-plugin-asn from 1.0.9 to 2.0.0 #3062
451
+ - dep(redis): 3.1 -> 4.1 #3058
452
+ - dep(nopt): 5 -> 6.0.0 #3076
453
+ - dep(haraka-plugin-fcrdns): 1.0.3 -> 1.1.0 #3076
454
+ - dep(haraka-plugin-redis): 1.0 -> 2.0 #3038
455
+ - dep(nodemailer): 6.7.0 to 6.7.2 #3000, #3004
456
+ - dep: add explicit dependency on node-gyp 9
457
+ - ci: github action tweaks #3047
458
+ - chore: transaction guarding #3032
459
+ - ci: enable windows node 16 testing #3036
460
+ - chore: update phusion image #2988
461
+ - chore: add lots of `if (!transaction) return` in places #2732
462
+ - chore(test): build shims for windows-2022 & node on windows #3052
463
+ - chore(test): restore CI tests to working order #3030
464
+ - dkim_sign: reformat dkim signature to multi-line #2991
465
+ - dkim_sign: remove spurious error logging #3034
466
+ - tls: add force_tls option to the ToDo object
467
+ - fix(banner): banner was inserted erroneously into text attachments
468
+ - outbound: remove hardcoded AUTH PLAIN authorization identity
469
+ - outbound: set acquireTimeoutMillis to prevent constant reconnect to unreachable servers
470
+ - style(smtp_client): pass args as objects (was positional)
471
+ - uribl: timeout DNS 1 second before plugin, #3077
472
+ - uribl: load .ini config to plugin.cfg, add basic tests #3077
473
+
474
+ ### 2.8.28 - 2021-10-14
475
+
476
+ #### Changes
477
+
478
+ - breaking: dkim.js has changed the constructor opts
479
+ - tls_socket: more flexible pem file parsing #2986
480
+ - move bad certs into different directory, avoid test suite noise
481
+ - added ability to define a default relay in relay_dest_domains
482
+ - spamassassin: replace msg_too_big & should_check with should_skip #2972
483
+ - spamassassin: allow returning DENYSOFT on errors #2967
484
+ - dep: use caret version range for all dependencies #2965
485
+ - outbound: disable outbound to localhost by default #2952
486
+ - connection error logging: use key-value pairs #2921
487
+ - tls: change default to NOT send TLS client certs #2902
488
+ - dep: redis is now a dependency #2896
489
+ - use address-rfc2821 2.0.0
490
+ - http: use CDN for bootstrap/jquery, drop bower #2891
491
+ - drop support for node 10 #2890
492
+
493
+ #### New features
494
+
495
+ - tls: require secure and verified sockets for configured hosts/domains
496
+ - DKIM plugin has got a couple of config options now
497
+ - tls: add `no_starttls_ports` - an array of incoming ports where STARTTLS is not advertised
498
+ - outbound: add local_mx_ok config #2952
499
+ - skip plugins at runtime by pushing name into transaction.skip_plugins #2966
500
+ - outbound: add ability to specify delay times for temporary fails in `temp_fail_intervals` #2969
501
+
502
+ #### Fixes
503
+
504
+ - bounce: correctly set fail recipients #2901
505
+ - bounce: correctly set bounce recipients #2899
506
+ - Get local_ip from getsockname() instead of server properties #2914
507
+ - Received header TLS section adheres more closely to RFC 8314 #2903
508
+ - use RFC-2045 Quoted-Printable in email message body
509
+ - use RFC-2047 Q encoded-words in email headers
510
+
511
+ ### 2.8.27 - 2021-01-05
512
+
513
+ #### Changes
514
+
515
+ - bump verions of several dependencies #2888
516
+ - propagate hmail notes to split copies #2887
517
+ - log.ini: add json to list of formats in config doc #2881
518
+ - exclude port 587 from TLS NO-GO feature #2875
519
+ - strip _haraka-plugin-_ prefixes off plugin names in config/plugins #2873
520
+ - pass smtp.ini config from Server into connections & transactions #2872
521
+
522
+ #### New features
523
+
524
+ - add ability to disable SMTPUTF8 advertisement #2866
525
+
526
+ #### Fixes
527
+
528
+ - assure headers.max_lines is initialized as integer #2878
529
+ - require haraka-net-utils >= 1.2.2 #2876
530
+
531
+ ### 2.8.26 - 2020-11-18
532
+
533
+ #### Changes
534
+
535
+ - add config options for OAR & AR headers #2855
536
+ - plugins.js: also strip haraka-plugin prefix from plugin.name #2846
537
+ - smtp_forward/spamssassin: grab refs of conn/txn to avoid crashes due to lack of existence. #2847
538
+ - outbound: add extended reason to bounce message #2843
539
+ - hgrep: replaced perl script with shell script #2842
540
+ - connection: send temp error when requested #2841
541
+ - headers: updated deprecated messages #2845
542
+ - hmail: socket.on -> socket.once #2838
543
+ - hmail: check for zero length queue file #2835
544
+ - outbound: add os.hostname() as default for outbound HELO #2813
545
+ - use node v10's mkdir instead of mkdirp #2797
546
+ - CI: drop appveyor and Travis #2784
547
+ - lint: add 'prefer-template'
548
+ - update async to version 3.2.0 #2764
549
+ - update redis to version 3.0.0 #2759
550
+ - remove deprecated max_unrecognized_commands from config #2755
551
+ - CI: add ES2017 support, drop node 8 #2740
552
+ - fix broken bannering on nested mime parts #2736
553
+ - restore TLS version info, set correctly #2723
554
+ - better error message when invalid HELO hostname is rejected
555
+ - bring STARTTLS "TLS NO-GO" feature in line with Outbound's #2792
556
+ - add listener for secureConnect #2828
557
+ - removed plugins/data.headers to haraka-plugin-headers #2826
558
+ - add zero-length queue size check
559
+ - send temp instead of hard error when asked to by `unrecognized_command`
560
+
561
+ #### New features
562
+
563
+ - Allow web interface to be bound to unix socket #2768
564
+ - tls: add configurable minVersion to tls socket options #2738
565
+ - connection_close_message: added ability to override close connection message replacing `closing connection. Have a jolly good day.` #2730
566
+ - add JSON format for logging #2739
567
+ - support binding web interface to unix socket
568
+
569
+ #### Fixes
570
+
571
+ - check for punycode domain names when resolving MX, avoid crash #2861
572
+ - wait until entire message is spooled when spool_after in use #2840
573
+ - hmail: add missing space in temp_fail emitter #2837
574
+ - fix outbound config reloading after outbound split #2802
575
+ - smtp_forward: remove redundant outbound hook #2796
576
+ - smtp_forward: this plugin does not use the queue_outbound hook anymore #2795
577
+ - Fix connection pool not being unique when hosts and ports were equal between domains #2789
578
+ - fix connection pool not being unique when hosts and ports were equal between domains #2788
579
+ - Fix outbound.bounce_message To: header (and add Auto-Submitted) #2782
580
+ - Fix support for DKIM signing when forwarding and aliasing is enabled #2776
581
+ - Better error message when EHLO hostname does not have a dot #2775
582
+ - fix bannering on nested mime parts #2737
583
+ - TLS: don't abort loading certs in config/tls dir when an error is encountered. Process every cert file and then emit errors. #2729
584
+ - restore TLS version, correctly #2723
585
+
586
+ ### 2.8.25 - 2019-10-11
587
+
588
+ #### Changes
589
+
590
+ - conn: remove TLS version from header #2648
591
+ - Actually enforce using key for INTERNALCMD #2643
592
+ - trans: assign conditions to named vars #2638
593
+ - drop node.js v6 support #2632
594
+ - conn: use is_local instead of localhost addr tests #2627
595
+ - spamassassin: spamassassin: strip useless WS from tests #2624
596
+ - es6: many updates #2615, #2674, #2680
597
+ - systemctl: update service definition #2612
598
+ - lint: bracket style to match newer eslint:recommended #2680
599
+ - lint: use object shorthands (eslint:recommended) #2680
600
+ - logger: use safer Object.prototype.hasOwnProperty #2680
601
+ - outbound: permit # char in SMTP status code response #2689
602
+ - dkim_sign: improve docs, add tests, es6 updates #2649
603
+ - dkim_sign: restore default key signing feature #2649
604
+ - tmp module: update to latest #2614
605
+ - semver: update to latest #2616, #2651
606
+ - async: update to latest #2653, #2664
607
+ - repo cleanup: replaced deprecated plugins with list #2681
608
+ - spf: es6 patterns, results.pass, test improvements, es6 patterns #2700
609
+
610
+ #### New features
611
+
612
+ - spf: add config option to fail on NONE #2644
613
+
614
+ #### Fixes
615
+
616
+ - mailheader: fully quality header name in \_remove_more #2647
617
+ - haraka: Connection.createConnection is not a constructor #2618
618
+ - problems with japanese characters in body and part header #2675
619
+ - toobusy: fix hook name (connect_pre -> connect) #2672
620
+ - outbound: watch for socket timeouts #2687
621
+ - outbound: permit # char prefix in SMTP status code response #2691
622
+ - mailheader: strip whitespace between encoded-words #2702
623
+
624
+ ### 2.8.24 - Mar 12, 2019
625
+
626
+ #### Changes
627
+
628
+ - early_talker: skip if sender has good karma #2551
629
+ - dockerfile: update to node 10 #2552
630
+ - Update deprecated usages of Buffer #2553
631
+ - early_talker: extend reasons to skip checking #2564
632
+ - tls: add 'ca' option (for CA root file) #2571
633
+ - outbound: little cleanups #2572
634
+ - smtp_client: pass pool_timeout to new SMTPClient #2574
635
+ - server: default to nodes=1 (was undefined) #2573
636
+ - test/server: use IPv4 127.0.0.1 instead of localhost #2584
637
+ - queue/smtp\_\*: add v3 upgrade notice and config setting #2585
638
+ - spf: use the skip config for helo/ehlo checks #2587
639
+ - spf: avoid 2nd EHLO evaluation if EHLO host is identical #2592
640
+ - queue.js refactoring #2593
641
+ - Log dkim_sign parse errors with connection ID #2596
642
+ - Update ipaddr.js to the latest version #2599
643
+ - make inactivity timeout match docs #2607
644
+
645
+ #### New Features
646
+
647
+ - Implement SIGTERM graceful shutdown if pid is 1 #2547
648
+ - tls: require validated certs on some ports with requireAuthorized #2554
649
+ - spamassassin: disable checks when requested #2564
650
+ - clamd: permit skipping for relay clients #2564
651
+ - outbound: exported outbound.temp_fail_queue, outbound.delivery_queue and add TimerQueue.discard()
652
+ - status: new plugin #2577
653
+
654
+ #### Fixes
655
+
656
+ - mf.resolvable: reduce timeout by one second (so < plugin.timeout) #2544
657
+ - LMTP blocks under stress #2556
658
+ - invalid DKIM when empty body #2410
659
+ - prevent running callback multiple times on TLS unix socket #2509
660
+ - add missing callback when listing queue and empty directory
661
+ - correct MIME parsing when charset: utf8 and encoding: 8bit #2582
662
+ - spamassassin: default check flags to true #2583
663
+ - smtp_client: destroy when connection gets conn timeout error #2604
664
+ - on error and timeout, remove listeners and destroy conn. #2606
665
+
666
+ ### 2.8.23 - Nov 18, 2018
667
+
668
+ #### Changes
669
+
670
+ - tighten Haraka pattern in .gitignore #2542
671
+
672
+ ### 2.8.22 - Nov 17, 2018
673
+
674
+ #### New Features
675
+
676
+ - enable tls/ssl for rabbitmq amqplib plugin #2518
677
+
678
+ #### Fixes
679
+
680
+ - hmail: don't send RSET to LMTP #2530
681
+
682
+ #### Changes
683
+
684
+ - clamd: add check.authenticated, check.private_ip, check.local_ip option
685
+ - use get_decoded on headers that may be encoded #2537
686
+ - connection: move max_mime_part config load to connection init #2528
687
+ - outbound: init TLS when we send email, not when old queue file is loaded #2503
688
+ - relay: update port 465 doc #2522
689
+ - hmail: log the correct err message #2531
690
+ - ob/tls: consistently use obtls (vs plugin) for "this" name #2524
691
+ - outbound: add domain to loginfo message #2523
692
+ - Add connection.remote.is_local #2532
693
+ - update license #2525
694
+ - perf: move max_mime_parts config load to connection init #2529
695
+ - update semver to version 5.6.0 #2517
696
+ - added hint to encrypted file authentication #2514
697
+ - dkim_sign: improved log messages #2499
698
+ - ehlo_hello_message: config/ehlo_hello_message can be used to overwrite the EHLO/HELO msg replacing `, Haraka is at your service` #2498
699
+ - connection: add connection.remote.is_local flag for detecting loopback and link local IPs
700
+ - add .name to outbound TLS for logs #2492
701
+
702
+ ### 2.8.21 - Jul 20, 2018
703
+
704
+ #### New Features
705
+
706
+ - outbound: skip STARTTLS after remote host fails TLS upgrade #2429
707
+ - dns_list_base: introduce global plugin.lookback_is_rejected flag #2422
708
+
709
+ #### Fixes
710
+
711
+ - replace all \_ chars in hostnames with code points #2485
712
+ - Don't die on invalid commands #2481
713
+ - outbound: check list exists before attempting to use it #2478
714
+ - refactor outbound/hmail.process_ehlo_data #2488
715
+ - tls: skip when redis is undefined #2472
716
+ - Don't run delivered hook on LMTP fail #2470
717
+ - Add tls_socket.load_tls_ini() to tls.register() #2465
718
+
719
+ #### Changes
720
+
721
+ - outbound/tls: make into a class #2474
722
+ - plugins: clear timeout on cancel #2477
723
+ - txn.parse_body consistently a boolean #2476
724
+ - update ipaddr.js to version 1.8.0 #2468
725
+
726
+ ### 2.8.20 - Jun 29, 2018
727
+
728
+ #### Fixes
729
+
730
+ - data_headers: check defined-ness of hdr_address *after* try/catch #2458
731
+ - tls: remove tls.ini loading from plugins/tls #2459
732
+ - tls: remove invalid opt from load_tls_ini #2456
733
+ - outbound: escape values in HTML bounce correctly #2446
734
+ - dkim_sign: catch exceptions when address-rfc2822 fails to parse From #2457
735
+
736
+ #### Changes
737
+
738
+ - logger: Add "obj" log param to log hook that contains log data by type #2425
739
+ - logger: include outbound client ID in logging #2425
740
+ - logger: allow specifying uuid in params when logging #2425
741
+
742
+ ### 2.8.19 - Jun 26, 2018
743
+
744
+ #### New features
745
+
746
+ - outbound: received_header=disabled supresses outbound Received header addition. #2409
747
+ - auth_base.js: `check_plain_passwd` and `check_cram_md5_passwd` can now pass `message` and `code` to callback routine
748
+ - spf: allow bypass for relay and AUTH clients #2417
749
+ - spf: optionally add OpenSPF help text to rejection #2417
750
+ - auth_base: prevent storing of AUTH password in connection.notes.auth_passwd by setting plugin.blackout_password. #2421
751
+
752
+ #### Fixes
753
+
754
+ - Mitigate MIME part explosion attack #2447
755
+ - Always prefix ClamAV with a Received header #2407
756
+ - plugins/data.headers.js: wrap address-rfc2822 header parse into try block #2373
757
+ - tls_socket: as client, only apply TLS opts if config is valid #2414
758
+ - when installing, creates config/me if missing #2413
759
+ - queue/qmail-queue: fix a 2nd crash bug when client disconnects unexpectedly #2360
760
+ - remove desconstruction of SMTP commands to prevent exception #2398
761
+ - attstream: return self so that pipe() calls can be chained together. #2424
762
+ - outbound: fix dotfile cleanup to consider platform-based prefix. #2395
763
+ - outbound: fix handling of LMTP socket when a socket path is specified. #2376
764
+
765
+ #### Changes
766
+
767
+ - relay: move relay acl check to connect_init so flag is set earlier #2442
768
+ - process_title: add total recipients, avg rcpts/msg, recipients/sec cur/avg/max and messages/conn #2389
769
+ - when relaying is set in a transaction, don't persist beyond the transaction #2393
770
+ - connection.set supports dot delimited path syntax #2390
771
+ - remove deprecated (since 2.8.16) ./dsn.js
772
+ - Add transaction.msg_status property that reflects message status. #2427
773
+ - Add transaction.notes.proxy object that hold HAProxy details. #2427
774
+ - spamassassin: make relay header configurable. #2418
775
+ - deprecate max_unrecognized_commands plugin in favor of limit. #2402
776
+ - xclient: add support for DESTADDR/DESTPORT. #2396
777
+
778
+ ### 2.8.18 - Mar 8, 2018
779
+
780
+ #### New features
781
+
782
+ - smtp_forward: domain configuration is now chosen based on domain_selector #2346
783
+
784
+ #### Fixes
785
+
786
+ - queue/qmail-queue: fix crash bug when client disconnects unexpectedly #2360
787
+ - tls: fix crash bug in `unrecognized_command` hook
788
+ - `dkim_key_gen.sh`: improve usability and parameter parsing #2355
789
+
790
+ #### Changes
791
+
792
+ - document `force_shutdown_timeout` and `graceful_shutdown` settings #2350
793
+
794
+ ### 2.8.17 - Feb 16, 2017
795
+
796
+ #### New Features
797
+
798
+ - SMTPS port is configurable #2269
799
+ - smtp_forward: enable_outbound can be set per domain #2335
800
+
801
+ #### Fixes
802
+
803
+ - Fix ability to set log level to emerg #2128
804
+ - outbound/hmail: use Buffer to correctly read binary file data + tests #2231
805
+ - quarantine: consolidate 2x hook_init_master functions
806
+ - tls_socket: restore SNI functionality, emit count of TLS certs #2293
807
+ - fix smtp_client error handling #2298
808
+ - fix outbound pools #2317
809
+ - add openssl-wrapper as dependency #2320
810
+ - replace \_ chars in hostnames with code points #2324
811
+ - add this.removeAllListeners('connection-error') #2323
812
+ - Fix crashing on RSET #2328
813
+ - Prevent data headers crit fail #2329
814
+ - Fix undefined max_lines in log message #2337
815
+
816
+ #### Changes
817
+
818
+ - line_socket: remove superfluous function #2339
819
+ - consistent end of function declaration semicolon #2336
820
+ - connection: assure hostname is set #2338
821
+ - smtp_client: Fix log message typo #2334
822
+ - Update ipaddr.js to version 1.6.0 #2333
823
+ - Warn on max_header_lines #2331
824
+ - update jquery version #2322
825
+ - plugins: add SRS plugin to registry #2318
826
+ - tls_socket: only generate dhparam.pem on master process #2313
827
+ - add ENOTFOUND to also check A record #2310
828
+ - smtp_forward: correct config file name in docs #2309
829
+ - reduce severity of iconv conversion failure #2307
830
+ - Add txn UUID to "250 Message Queued" #2305
831
+ - mailheader: reduce log level priority #2299
832
+ - greylist: only log redis DB errors when exist #2295
833
+ - data.headers: reduce undef MLM logerror to logdebug #2294
834
+ - quarantine: consolidate 2x hook_init_master() #2292
835
+ - move test_queue to queue/test #2291
836
+ - in haraka plugin test mode, add server.notes #2248
837
+ - outbound/hmail: refactor #2238
838
+ - outbound/hmail: add JSON sanity test before JSON.parse #2231
839
+ - outbound/index: use newer Buffer.from syntax #2231
840
+ - outbound/hmail: make haraka queue files human friendly #2231
841
+ - plugins/rcpt_to.ldap -> haraka-plugin-rcpt-ldap #2144
842
+ - plugins/auth/auth_ldap -> haraka-plugin-auth-ldap #2144
843
+ - plugins/smtp_forward: enable_outbound can be enabled/disabled for specific domains
844
+ - auth_proxy: read TLS key and cert files from tls.ini #2212
845
+ - README: typo fixes #2210
846
+ - incorrect RCPT TO reply message #2227
847
+ - Resolve decoding bug when root part is base64 encoded. #2204
848
+ - Resolve base64 data truncation #2188
849
+ - Fix damaged encoding when body is non-utf #2187
850
+ - Fix disconnect hooks #2184
851
+ - ability to set log level to emerg #2128
852
+ - Improve docs for `Address` objects #2224
853
+ - connection: replace 3x ternaries with get_remote() #2169
854
+ - connection.local.host populated with hostname (from config/me) #2165
855
+ - connection.local.info populated with Haraka/version #2196
856
+ - npm packaged plugins:
857
+ - plugins/rcpt_to.ldap -> haraka-plugin-rcpt-ldap #2144
858
+ - plugins/auth/auth_ldap -> haraka-plugin-auth-ldap #2144
859
+ - plugins/graph -> haraka-plugin-graph #2185
860
+ - config: replace ./config.js with haraka-config #2119
861
+ - Replace concatenated strings with template literals #2129 in:
862
+ - attachment #2260
863
+ - bin/spf #2129
864
+ - bin/dkimverify #2278
865
+ - connection #2129, #2243
866
+ - delay_deny #2264
867
+ - dkim #2216
868
+ - dsn #2265
869
+ - host_pool #2198, #2245
870
+ - logger #2277, #2246
871
+ - mailbody #2280
872
+ - max_unrecognised_commands #2171
873
+ - outbound/hmail #2259
874
+ - outbound/index #2249
875
+ - outbound/todo #2233
876
+ - plugins #2239
877
+ - plugins/aliases #2229
878
+ - plugins/attachment #2155
879
+ - plugins/auth_base #2252
880
+ - plugins/avg #2156
881
+ - plugins/backscatterer #2261
882
+ - plugins/bounce #2229
883
+ - plugins/clamd #2237
884
+ - plugins/connect.rdns_access #2262
885
+ - plugins/data.headers #2263
886
+ - plugins/data.uribl #2258
887
+ - plugins/helo.checks #2255
888
+ - plugins/rcpt_to.in_host_list #2253
889
+ - plugins/spamassassin #2256
890
+ - plugins/profile #2170
891
+ - plugins/rcpt_to.host_list_base #2254
892
+ - plugins/relay #2174
893
+ - plugins/relay_acl #2177
894
+ - plugins/spf #2266
895
+ - plugins/toobusy #2186
896
+ - plugins/xclient #2159
897
+ - rfc1869 #2160
898
+ - smtp_client #2129, #2208
899
+ - tests/host_pool #2159
900
+ - use es6 destructuring (#2075) in:
901
+ - connection #2230
902
+ - dkim #2232
903
+ - use es6 classes (#2133) in:
904
+ - attachment #2260
905
+ - attachment_stream #2215
906
+ - chunkemitter #2219
907
+ - dkim #2206
908
+ - dsn #2247
909
+ - host_pool #2194
910
+ - mailheader #2213
911
+ - mailbody #2213
912
+ - smtp_client #2221
913
+ - spf #2214
914
+ - tls_socket #2190
915
+ - timer_queue #2226
916
+ - outbound/hmail #2197
917
+ - outbound/todo #2233
918
+ - Automatically set connection.remote.is_private when connection.remote.ip is set #2192
919
+ - Add remove_msgid and remove_date options to outbound.send_email #2209
920
+ - Add origin option to outbound.send_mail #2314
921
+
922
+ ### 2.8.16 - Sep 30, 2017
923
+
924
+ #### Changes
925
+
926
+ - additional tests get var -> const/let medicine #2122
927
+ - move connection states into haraka-constants #2121
928
+ - lint: remove useless escapes #2117
929
+ - lint: switch no-var to error #2109
930
+ - rspamd: repackaged as NPM module #2106
931
+ - dsn: repackaged as NPM module haraka-dsn #2105
932
+ - outbound: add results when queueing #2103
933
+ - spamassassin: skip adding headers when value is empty #2102
934
+ - Replace console.log with stdout #2100
935
+ - update js-yaml to version 3.10.0 #2097
936
+ - repackage p0f plugin to NPM #2076
937
+ - ES6: replace var with const or let #2073
938
+
939
+ #### New Features
940
+
941
+ - Bounces can have an HTML part #2091
942
+
943
+ #### Fixes
944
+
945
+ - daemon cwd #2126
946
+ - updated fcrdns plugin name passed to results #2115
947
+ - tls: only apply default key/cert paths when undefined #2111
948
+ - dkim_verify: fix formatting of auth results #2107
949
+ - smtp_forward: consistently use queue.wants #2107
950
+ - haraka was adding TLS header on non-TLS connection #2103
951
+ - dkim typo fix #2101
952
+ - fix rfc2231 parsing code to cope with continuation #2089
953
+
954
+ ### 2.8.15 - Sep 10, 2017
955
+
956
+ #### Changes
957
+
958
+ - Permit log settings to be set w/o LOG prefix #2057
959
+ - additional results storing in smtp_forward and quarantine #2067
960
+ - publish p0f plugin to NPM #2076
961
+ - smtp_forward stores queue note at queue.wants #2083
962
+ - Remove unused folders from installation #2088
963
+ - smtp_forward stores queue note at queue.wants #2083
964
+ - add get/set to conn/txn.notes #2082
965
+ - additional results storing in smtp_forward and quarantine #2067
966
+ - Permit log settings to be set w/o LOG prefix #2057
967
+ - support INFO _and_ LOGINFO as config settings #2056
968
+ - log.ini, new default location for log related settings #2054
969
+ - dcc: replace with npm packaged version #2052
970
+ - qmd: replace rcpt_to.qmail_deliverable with npm #2051
971
+ - rspamd: pass SPF evaluation #2050
972
+ - add logfmt support #2047
973
+ - update ipaddr.js to version 1.5.0 #2037
974
+ - update redis to version 2.8.0 #2033
975
+ - disable graceful for SIGTERM #2028
976
+ - add additional integration tests #2026
977
+ - move most npm packaged plugins into optionalDependencies #2023
978
+
979
+ #### New Features
980
+
981
+ - TLS certificate directory (config/tls) #2032
982
+ - plugins can specify a queue plugin & next_hop route #2067
983
+ - connection/transaction notes now have get/set #2082
984
+
985
+ #### Fixes
986
+
987
+ - haraka cli will now create folders if they don't exist #2088
988
+ - maybe fix for #1852 503 response #2064
989
+ - crash when 'AUTH LOGIN' is sent after a successful auth #2039
990
+ - docs: fixed swaks test command #2034
991
+ - dkim: prevent dkim_verify from causing 'cannot pipe' #1693
992
+
993
+ ### 2.8.14 - Jul 26, 2017
994
+
995
+ #### Changes
996
+
997
+ - Fix auth plugin failure when re-selecting auth method #2000
998
+ - don't crash Haraka when invalid YAML config encountered #2013
999
+ - update semver to version 5.4.0 #2015
1000
+ - relay docs: correct the config file name #2012
1001
+ - rename config/xclient.hosts to match plugin & docs #2014
1002
+ - build_todo() is part of the outbound/index.js api #2016
1003
+ - update js-yaml to version 3.9.0 #2002
1004
+ - outbound/hmail: use WRITE_EXCL from haraka-constants #2011
1005
+ - replace plugins/log.elasticsearch with npm packaged #2004
1006
+ - Remove two spurious log statements #1989
1007
+ - access: rebuild blacklist upon change (vs supplement) #1990
1008
+ - deliver to qmail-queue with LF line endings (not CRLF) #1997
1009
+ - doc: add note that smtp_forward only supports STARTTLS #1988
1010
+ - import Plugins.md from v3 #1991
1011
+ - update async to 2.5.0 #1982
1012
+ - update iconv to 2.3.0 #1981
1013
+ - require node.js v6+ #1958
1014
+ - update ipaddr.js to 1.4.0 #1972
1015
+ - support newer address-rfc2822 #1970
1016
+ - update node-address-rfc2821 version to 1.1.1 #1968
1017
+ - outbound: be consistent with todo.domain #1960
1018
+ - bump haraka-results required version #1949
1019
+ - logger: load in a setImmediate call #1948
1020
+ - logger: strip intermediate \n chars #1947
1021
+ - tls consistency cleanups #1851
1022
+ - Get pool config handling simplifcation #1868
1023
+ - add integration test: send message w/smtp_client
1024
+ - replace some legacy code with es6 #1862
1025
+ - update async to version 2.2.0 #1863
1026
+ - update ipaddr.js to version 1.3.0 #1857
1027
+ - update redis to version 2.7.0 #1854
1028
+ - assure conn/tran still exists before storing results #1849
1029
+ - moved tls.ini parsing to net_utils #1848
1030
+ - smtp forward dest split routing #1847
1031
+ - rspamd: refactor complex condition into function #1840
1032
+ - block js attachments #1837
1033
+ - helo.checks: bring plugin into alignment with docs #1833
1034
+ - when proxy enabled, update remote.is_private too #1811
1035
+ - create an outbound queue filename handler #1792
1036
+ - replace fcrdns with npm package #1810
1037
+ - add an additional node_modules plugin search path #1805
1038
+ - Set graceful shutdown off by default #1927
1039
+ - Allow outbound pools to be disabled #1917
1040
+ - Outbound split and move into folder #1850
1041
+ - don't emit binary characters into the logs #1902
1042
+ - Add .editorconfig #1884
1043
+ - tls: remove interim variables #1871
1044
+
1045
+ #### New Features
1046
+
1047
+ - Use punycode domain (support SMTPUTF8) #1944
1048
+ - Added RabbitMQ vhost support #1866
1049
+ - clamav: allow "Unknown Result" and Socket Error to try next host #1931
1050
+ - outbound client certificates #1908
1051
+ - Implement the missing upgrade method on SMTPClient #1901
1052
+ - Remove typo from relay.md #1886
1053
+
1054
+ #### Fixes
1055
+
1056
+ - outbound: fix queue not loaded for single process #1941
1057
+ - outbound: Fix undefined variable platformDOT in hmail.js #1943
1058
+ - outbound: fix undefined FsyncWriteStream var #1953
1059
+ - Fix cluster messaging for node v6+ #1938
1060
+ - outbound: fix loading under cluster. #1934
1061
+ - Check pool exists before delete #1937
1062
+ - be more strict in attachment filename matching #1957
1063
+ - doc typo fix #1963
1064
+ - RabbitMQ: fix encoding of user and password string #1964
1065
+ - spf: improve modifier regexp #1859
1066
+ - rabbitmq doc typo in config file name #1865
1067
+ - URL to manual was 404, point to Plugins.md #1844
1068
+ - smtp_client: set idleTimeout to 1s < pool_timeout #1842
1069
+ - fix broken continuations #1843
1070
+ - doc error for the 'check.authenticated' setting in rspamd plugin #1834
1071
+ - emit _the_ result, not all of them #1829
1072
+ - fix outbound logger #1827
1073
+ - fix forwarding with client auth over TLS (forward to gmail) #1803
1074
+ - Don't blow the stack on qstat #1930
1075
+ - run dumped logs through log plugins, not console #1929
1076
+ - Fix path parsing bug on Windows platform #1919
1077
+ - helo: make sure list_re is defined before access #1903
1078
+ - TLS: handle case where OCSP server is unavailable #1880
1079
+ - rspamd: add missing 'default' keyword #1856
1080
+ - disable naïve comment stripping #1876
1081
+
1082
+ ### 2.8.13 - Feb 03, 2017
1083
+
1084
+ #### Changes
1085
+
1086
+ - new [haraka-plugin-limit](https://github.com/haraka/haraka-plugin-limit) #1785
1087
+ - replaces plugin/limit, plugin/rate_limit, and haraka-plugin-outbound-rate-limit
1088
+ - p0f: skip on private IPs (normally empty) #1758
1089
+ - spf: skip for outbound when context != myself #1763
1090
+ - redis: plugins using redis can inherit redis config #1777
1091
+ - redis: replace plugins/redis with haraka-plugin-redis #1786
1092
+ - lint: require space before function declaration #1784
1093
+ - lint: added eslint:recommended #1790
1094
+ - logger: remove logger.colorize code for legacy node versions
1095
+
1096
+ #### New Features
1097
+
1098
+ - redis: add `redis_subscribe_pattern()` #1766
1099
+ - queue/discard: add ENV that permits discarding #1791
1100
+
1101
+ #### Improvements
1102
+
1103
+ - rspamd: improve response parsing #1770
1104
+ - restore Windows testing to working state #1755
1105
+ - elasticsearch: use UTC dates for index creation #1771
1106
+ - tls: fix dhparam usage example syntax #1774
1107
+ - typo: logerr -> logerror #1776
1108
+ - when generating long DKIM keys, include a BIND compatible folded key #1775
1109
+ - in haraka-test-fixtures, access results via fixtures.results #1783
1110
+ - integration test: end to end server testing #1791
1111
+
1112
+ #### Fixes
1113
+
1114
+ - spf: restore functionality for relay context=myself #1759
1115
+ - rate_limit:if incr creates a new record, assure it has a TTL #1781
1116
+ - tls: do not create a top level secureContext #1787
1117
+ - dnswl: swap lines to fix missing inherited methods #1793
1118
+ - dnswl: fix config loader callback syntax #1794
1119
+ - tests/plugins: unset process.env.HARAKA to avoid side effects that interfere with other tests
1120
+ - remove auth_flat_file sample auth user #1796
1121
+
1122
+ ### 2.8.12 - Jan 03, 2017
1123
+
1124
+ #### Changes
1125
+
1126
+ - plugin/karma -> npm packaged haraka-plugin-karma #1747
1127
+ - update generic-pool 2.4.2 -> 2.5.0
1128
+
1129
+ #### New Features
1130
+
1131
+ - Added option to bypass SpamAssassin headers' merge #1745
1132
+
1133
+ #### Improvements
1134
+
1135
+ - reduce severity of debug message #1744
1136
+ - fix misleading entries in config/tls.ini #1734
1137
+ - Misc. performance improvements #1738
1138
+ - set tls.sessionIdContext property (for Thunderbird compat) #1740
1139
+
1140
+ #### Fixes
1141
+
1142
+ - Swap lines to avoid clobbering response array #1743
1143
+
1144
+ ### 2.8.11 - Nov 24, 2016
1145
+
1146
+ #### Changes
1147
+
1148
+ - rename core_require to haraka_require #1708
1149
+ - move log.syslog to haraka-plugin-syslog #1698
1150
+ - remove tls.ini loading and is_no_tls_host to net_utils #1690
1151
+ - replace ./utils with npm packaged haraka-utils #1720
1152
+ - require node 4
1153
+ - karma: add .top TLD scoring #1714
1154
+
1155
+ #### New Features
1156
+
1157
+ - Implement OCSP Stapling #1724
1158
+
1159
+ #### Improvements
1160
+
1161
+ - show help for npm packaged plugins included in core #1698
1162
+ - use tls.connect for client #1682
1163
+ - bring port 465 SMTPS TLS config support on par with STARTTLS #1667
1164
+ - use tls.connect instead of createSecurePair #1678
1165
+ - redis: improve error handling in tests #
1166
+ - replace / path seperators with path.\* for cross platform compat #1713
1167
+
1168
+ #### Fixes
1169
+
1170
+ - dkim_sign: per-domain key finding fixed #1707
1171
+ - Rspamd: restore spam report header #1702
1172
+ - auth/vpopmail: do not toString() when null #1695
1173
+ - fix outbound to avoid recursive reading key/cert after refactoring #1692
1174
+ - tls: fix option servername (not hostname) #1728
1175
+ - correct Auth-Results cleaning #1726
1176
+ - fix results for connection.remote_host and NXDOMAIN #1716
1177
+
1178
+ ### 2.8.10 - Oct 20, 2016
1179
+
1180
+ #### Changes
1181
+
1182
+ - use standard npm syntax for lint and tests #1646
1183
+ - remove ./net_utils to haraka-net-utils #1644
1184
+ - remove incorrect and unused spf.hello_host #1635
1185
+ - remove rogue DENYSOFT copy-pasta error #1634
1186
+ - update async to v2 #1545
1187
+ - remove plugin/dir support from base haraka #1668
1188
+ - use node_modules_dir support instead
1189
+ - use TLSSocket instead of createSecurePair #1672
1190
+ - refactor plugins/tls #1670
1191
+ - moved watch plugin to npm as haraka-plugin-watch #1657
1192
+ - normalize proxy properties #1650
1193
+
1194
+ #### New Features
1195
+
1196
+ - added connection.remote.is_private boolean #1648
1197
+ - added additional TLS options (@typingArtist) #1651
1198
+ - added wildcard boolean support to config loader #1680
1199
+ - tls: allow multiple key and cert parameters for RSA+ECDSA #1663
1200
+ - permit specifying haraka plugins w/o haraka-plugin- prefix #1645
1201
+ - in config/plugins and resultstore
1202
+
1203
+ #### Improvements
1204
+
1205
+ - connection.geoip replaced by haraka-plugin-geoip #1645
1206
+ - connection.asn replaced by haraka-plugin-asn #1645
1207
+ - permit specifying npm packaged plugins w/o haraka-plugin prefix #1647
1208
+ - normalized connection properties #1547, #1577
1209
+ - Rspamd: fix spambar for negative scores #1630
1210
+ - set connection.remote.is_private early
1211
+ - replace calls to net_utils with remote.is_private test
1212
+
1213
+ #### Fixes
1214
+
1215
+ - Tidy-up graceful shutdown and fix for non-cluster mode #1639
1216
+ - Fix data.headers plugin crash #1641
1217
+ - Fix access plugin crash #1640
1218
+ - Minor DKIM fix #1642
1219
+ - do not set TLS timer if timeout=0 #1632
1220
+ - do not overwrite config/host_list on install #1637
1221
+ - correct smtp_forward cfg for multiple rcpts #1680
1222
+ - fix TLS timeout errors #1665
1223
+
1224
+ ### 2.8.9 - Oct 02, 2016
1225
+
1226
+ #### New Features
1227
+
1228
+ - Support outbound.pool_timeout of 0 to effectively disable pooling. #1561
1229
+ - Added never_add_headers option to rspamd plugin. #1562
1230
+ - rcpt_to.routes URI format w/ LMTP support #1568
1231
+
1232
+ #### Improvements
1233
+
1234
+ - The delay_deny plugin now has a whitelist mode (vs blacklist). #1564
1235
+ - Don't show the private key in logs for dkim_sign. #1565
1236
+ - update geoip for compat with newer ES #1622
1237
+ - drop node 0.10 testing / official support #1621
1238
+ - watch plugin displays UUIDs as URL #1624
1239
+ - Catch errors on header decode in rfc2231 #1599
1240
+ - Attachment plugin updates #1606
1241
+ - add outbound.ini pool_timeout example setting #1584
1242
+
1243
+ #### Fixes
1244
+
1245
+ - Fixed some small documentation issues. #1573, #1616, #1612
1246
+ - Fixed AUTH PLAIN when it spreads over two lines. #1550
1247
+ - Fixed dkim_verify calling next() too soon. #1566
1248
+ - Fixed bugs with outbound pools who shutdown before we QUIT. #1561, #1572
1249
+ - outbound issues #1615, #1603
1250
+ - Fixed adding/removing headers in rspamd plugin. #1562
1251
+ - Fixed process_title not shutting down. #1560
1252
+ - fix a spurious error emitted by p0f #1623
1253
+ - fix header version hiding #1617
1254
+ - messagestream returns destination #1610
1255
+ - plugins.getdenyfn now passed 3rd params arg #1591
1256
+ - Fix scope of spf logdebug #1598
1257
+ - fix rabbitmq deliveryMode bug #1594
1258
+ - fix dkim_sign TypeError with null mail_from.host #1592
1259
+ - fix dkim_sign attempting to lower an undefined #1587
1260
+
1261
+ ### 2.8.8 - Jul 20, 2016
1262
+
1263
+ #### Changes
1264
+
1265
+ - removed UPGRADE.doc to [wiki](https://github.com/haraka/Haraka/wiki/Upgrade-Haraka)
1266
+
1267
+ #### Improvements
1268
+
1269
+ - support + wildcard in aliases plugin #1531
1270
+ - Support dkim_sign with outbound.send_email() #1512
1271
+ - spf: always check remote IP, then public IP if != pass #1528
1272
+ - spf: diplay IP used for SPF eval #1528
1273
+
1274
+ #### Fixes
1275
+
1276
+ - handle missing wss section in http.ini #1542
1277
+ - fix leak on socket write error #1541
1278
+ - add results property to outbound transaction #1535
1279
+ - don't unref unref'd wss server #1521
1280
+
1281
+ ### 2.8.7 - Jun 18, 2016
1282
+
1283
+ #### Changes
1284
+
1285
+ - Fix geoip test
1286
+
1287
+ #### Improvements
1288
+
1289
+ - Allow alias plugin to explode to a list of aliases
1290
+ - Support IPv6 literals in HELO tests #1507
1291
+ - Make ldap plugin use the modified address if a rcpt hook changes it #1501
1292
+
1293
+ #### Fixes
1294
+
1295
+ - Fix loading plugins as npm modules #1513
1296
+ - More DKIM fixes #1506
1297
+ - Fix the long failing host-pool-timer test #1508
1298
+ - Fix clean shutdown of redis with new shutdown code, #1504 and #1502
1299
+ - More fixes to clean shutdown #1503
1300
+
1301
+ ### 2.8.6 - Jun 06, 2016
1302
+
1303
+ #### Fixes
1304
+
1305
+ - Fix loading under Node v4 which sends a blank message
1306
+ - Fix quit (SIGINT) when running without nodes=
1307
+
1308
+ ### 2.8.5 - Jun 04, 2016
1309
+
1310
+ #### Changes
1311
+
1312
+ - The connection object is now passed to `get_plain_passwd`. Older modules should continue to work as-is.
1313
+ - The reseed_rng plugin now just uses the Crypto module from core. Though it seems this plugin should be irrelevant with newer versions of node.js
1314
+
1315
+ #### New Features
1316
+
1317
+ - Outbound mail now uses pooled connections, only sending a `QUIT` message if the connection has been idle for a while.
1318
+
1319
+ #### Improvements
1320
+
1321
+ - Shut down and reload (via `haraka -c <path> --graceful`) is now graceful - allowing current connections to finish and plugins to clean up before ending.
1322
+
1323
+ #### Fixes
1324
+
1325
+ - Bind maxmind version to ignore API change #1492
1326
+ - Fix encodings when banners are used #1477
1327
+ - Various DKIM fixes #1495
1328
+
1329
+ ### 2.8.4 - May 24, 2016
1330
+
1331
+ #### Fixes
1332
+
1333
+ - Fix plugin loading override when installed (#1471)
1334
+
1335
+ ### 2.8.3 - May 18, 2016
1336
+
1337
+ #### Fixes
1338
+
1339
+ - Fix config overriding for core modules (#1468)
1340
+
1341
+ ### 2.8.2 - May 17, 2016
1342
+
1343
+ #### Changes
1344
+
1345
+ - Added Node v6 to travis tests
1346
+
1347
+ #### New Features
1348
+
1349
+ - Added bin/haraka --qunstick <domain> to flush all mails
1350
+ for that domain (#1460)
1351
+
1352
+ #### Improvements
1353
+
1354
+ - Make bin/haraka --qlist show much more information (#1452)
1355
+ - Allow CIDR ranges in no_tls_hosts (#1450)
1356
+
1357
+ #### Fixes
1358
+
1359
+ - 2.8.0 was shipped with a broken config/plugins. (#1453)
1360
+ - Stop haraka dying when ldap connections fail (#1456)
1361
+ - Pick up domain specific config correctly in ldap (#1456)
1362
+
1363
+ ### 2.8.0 - May 06, 2016
1364
+
1365
+ #### Changes
1366
+
1367
+ - updated dependency versions (#1426, #1425)
1368
+ - use utf8 encoding for body filters (#1429)
1369
+ - remove spameatingmonkey from tests (#1421)
1370
+ - replace ./constants.js with haraka-constants (#1353)
1371
+ - Document HMail and TODO items (#1343)
1372
+ - Copy only a minimal config/\* by default (#1341).
1373
+ - cfreader/\* removed to haraka/haraka-config (#1350)
1374
+ - outbound and smtp_client honor tls.ini settings (#1350)
1375
+ - outbound TLS defaults to enabled
1376
+ - lint: remove all unused variables (#1358)
1377
+ - replace ./address.js with address-rfc2181 (#1359)
1378
+
1379
+ #### New Features
1380
+
1381
+ - smtp_forward: accepts a list of backend hosts, thanks @kgeoss (#1333)
1382
+ - config: add array[] syntax to INI files (#1345)
1383
+ - plugins.js: support require('./config') in plugins
1384
+ - Load plugin config from own folder and merge (#1335)
1385
+ - Allow original email's Subject to be included in bounce message (#1337)
1386
+ - new queue/smtp_bridge plugin, thanks @jesucarr (#1351)
1387
+
1388
+ #### Improvements
1389
+
1390
+ - early_talker: supports IP whitelisting (#1423)
1391
+ - loading plugins as packages (#1278)
1392
+ - removed TLD stuff to haraka/haraka-tld (#1301)
1393
+ - removed unused 'require('redis') in plugins/karma (#1348)
1394
+ - improved MIME header support per rfc2231 (#1344)
1395
+ - tls options can be defined for outbound and smtp\_\* (#1357)
1396
+ - explicitly disable SSLv2 (#1395)
1397
+ - cache STUN results
1398
+ - xclient plugin improvements (#1405)
1399
+ - tls: Set verify=NO correctly when no certificate presented (#1400)
1400
+ - improved message header decoding (#1403, #1406)
1401
+ - bounce: skip single_recipient check for relays/private_ips (#1385)
1402
+ - rspamd docs: Clarify usage of check.private_ip (#1383)
1403
+ - if rcpt_to returns DSN in msg, log it properly (#1375)
1404
+
1405
+ #### Fixes
1406
+
1407
+ - fix out-of-range errors from banner insertion (#1334)
1408
+ - dkim_verify: Call next only after message_stream ended (#1330)
1409
+ - outbound: remove type check from pid match (#1322)
1410
+ - lint: enable no-shadown and remove all shadow variables (#1349)
1411
+ - spf: fix log_debug syntax (#1416)
1412
+ - auto_proxy: fix a starttls loop (#1392)
1413
+ - fcrdns: corrected err variable name (#1391)
1414
+ - rspamd: Fix undefined variable (#1396)
1415
+ - dkim_verify: Fix header handling (#1371)
1416
+ - smtp_client: fix remote_ip (#1362)
1417
+
1418
+ ### 2.7.3 - Feb 04, 2016
1419
+
1420
+ #### Changes
1421
+
1422
+ - smtp_proxy & qmail-queue: default to enabled for outbound deliveries (previously used Outbound), to better matches user expectations.
1423
+
1424
+ #### New Features
1425
+
1426
+ - outbound: allow passing notes to send_email (#1295)
1427
+
1428
+ #### Improvements
1429
+
1430
+ - logging: emit log message queue before shutting down (#1296)
1431
+ - result_store: permit redis pub/sub to work when host != localhost (#1277)
1432
+ - tests: quiet the extremely verbose messages (#1282)
1433
+ - rspamd: add timeout error handling (#1276)
1434
+ - watch: fix display of early_talker results (#1281)
1435
+ - spamassassin: publish results to result_store (#1280)
1436
+ - karma: can now connect to redis on hosts other than localhost (#1275)
1437
+ - geoip & p0f: don't log empty/null values from RFC 1918 connects (#1267)
1438
+ - redis: make plugin params match docs (#1273)
1439
+ - mailbody: small refactoring (#1315)
1440
+ - smtp_proxy & qmail-queue: default to enabled for outbound (#1308)
1441
+
1442
+ #### Fixes
1443
+
1444
+ - redis: use correct path for db.select (#1273)
1445
+ - count errors correctly (#1274)
1446
+ - logger: ignore null arguments (#1299)
1447
+ - connection: pause for hook_reset_transaction (#1303)
1448
+ - rcpt_to.routes: update redis usage for compat with redis plugin (#1302)
1449
+ - smtp_forward: use correct config path to auth settings (#1327)
1450
+ - messagestream: correctly pass options parameter to get_data (#1316)
1451
+ - spf: honour configuration for mfrom scope (#1322)
1452
+ - outbound: Add missing dash to 'Final-Recipient' header name (#1320)
1453
+
1454
+ ### 2.7.2 - Dec 15, 2015
1455
+
1456
+ #### Fixes
1457
+
1458
+ - Revert a change that broke plugin loading
1459
+
1460
+ ### 2.7.1 - Dec 14, 2015
1461
+
1462
+ #### New Features
1463
+
1464
+ - added debian init.d file (#1255) @slattery
1465
+
1466
+ #### Improvements
1467
+
1468
+ - smtp_forward auth settings now work (#430)
1469
+ - better handling of broken messages (#1234)
1470
+ - Docker: use latest Phusion image && stdout (#1238, #1239)
1471
+ - Clean up plugin loading a tiny bit (#1242)
1472
+ - make dkim keydir case insensitive (1251)
1473
+ - ignore DNS errors that aren't errors (#1247)
1474
+ - outbound doc updates (#1258) @Currerius
1475
+ - outbound: return DENYSOFT on queue error (#1264)
1476
+ - smtp_client: if enable_tls is set and TLS files missing, warn (#1266)
1477
+
1478
+ #### Fixes
1479
+
1480
+ - Don't sent empty headers to rspamd (#1230)
1481
+ - Fix auth_base.js key need to be a string - number.toString() (#1228)
1482
+ - fix bug with empty charset= on mime parts … (#1225)
1483
+ - Fix "passwd" check crash with numeric password. (#1254)
1484
+ - result_store: show arrays when not empty (#1261)
1485
+
1486
+ ### 2.7.0 - Oct 07, 2015
1487
+
1488
+ #### New Features
1489
+
1490
+ - SPF bounce check
1491
+ - rspamd plugin (@fatalbanana)
1492
+ - watch plugin
1493
+ - limit plugin (connection concurrency, errors, unrecognized commands)
1494
+ - plugins can now be npm packages (see also #946)
1495
+ - built-in HTTP server (Express backed)
1496
+ - ESETS AV plugin
1497
+ - DCC plugin (incomplete)
1498
+ - Add LOGIN support to XCLIENT
1499
+ - backscatterer plugin
1500
+ - full IPv4 & IPv6 compatibility inbound #1120, #1123, #1154 (@Dexus)
1501
+ - Early talker #1075 (@smfreegard, @msimerson)
1502
+ - permit loading of plugins in node_modules #1056 (@msimerson)
1503
+
1504
+ #### Improvements
1505
+
1506
+ - Fix anti_spoof by use config #1171
1507
+ - Add license clause #1170
1508
+ - package.json dependencies and travis update #1147, #1168 (@Dexus)
1509
+ - logging: remove node-syslog and strong-fork-syslog with modern-syslog #1145 (@Dexus)
1510
+ - aliases: support for email, user and host aliases #1149 (@Dexus)
1511
+ - add docs for use private key with TLS #1130 (@Dexus)
1512
+ - outbound: ENOENT on dotfile - compatibility for windows #1129 (@Dexus)
1513
+ - plugin/attachment: block more attachment file types #1191 (@Dexus)
1514
+ - remove double functions #1126 (@Dexus)
1515
+ - Outbound Bounce messages according to RFC3464 #1189 (@hatsebutz)
1516
+ - toobusy: only run checks if toobusy.js installed and loads
1517
+ - HAProxy: set local_ip, local_port and remote_port
1518
+ - save auth pass/fail/user to result_store
1519
+ - ini files no longer require values (useful for storing lists)
1520
+ - connection: add MAIL and RCPT to results
1521
+ - results_store: enable 'emit' feature for .push()
1522
+ - add support for custom Outbound Received header value (@zombified)
1523
+ - save smtp_forward result to result_store
1524
+ - auth_base: permit a return message (@DarkSorrow)
1525
+ - add DSN.create() and RFC 4954 support
1526
+ - enhanced pipelining support
1527
+ - added config/access.domains with some tips (@EyePulp)
1528
+ - Add SSL detection over plain-text socket
1529
+ - earlytalker: store results
1530
+ - bounce: make it safe to check non_local_msgid
1531
+ - AVG: store results, added defer options
1532
+ - tls: change createCredentials to tls.createSecureContext (@DarkSorrow)
1533
+ - update dependency versions (esp async 0.2.9 -> 1.0.0)
1534
+ - ASN docs: add FTP download note for routeviews
1535
+ - karma: removed concurrency limits (see limit plugin) and penalty feature
1536
+ - added utils.elapsed()
1537
+ - deny message includes hostname
1538
+ - Add Fisher-Yates shuffle to randomize lookup order in data.uribl
1539
+ - change default message size limit to 25mb
1540
+ - auth_base: save auth results
1541
+ - upgrade toobusy plugin to toobusy-js (@alexkavon)
1542
+ - configfile: permit / char in ini keys
1543
+ - added utils.node_min()
1544
+ - added result_store.get_all()
1545
+ - updated ubuntu upstart script
1546
+ - plugin/rate_limit: return in no custom default is set 0 = unlimited #1186, #1185
1547
+ - Outbound.send_email: added dot-stuffing #1176, #1165 (@hatsebutz)
1548
+ - make sure server object is availabe to plugins loaded from node_modules #1162 (@bmonty)
1549
+ - Net_utils.get_ips_by_host #1160 (@msimerson)
1550
+ - fcrdns: don't log error for ENODATA #1140 (@msimerson)
1551
+ - improve MUA detection #1137 (@msimerson)
1552
+ - tls: tmp disable for hosts that fail STARTTLS #1136 (@msimerson)
1553
+ - karma: skip deny on outbound hooks #1100 (@msimerson)
1554
+ - Store HAProxy IP in connection object #1097 (@smfreegard)
1555
+ - Remove UUID from queued message #1092 (@smfreegard)
1556
+
1557
+ #### Fixes
1558
+
1559
+ - fix windows build and test failures #1076 (@msimerson)
1560
+ - Fix plugin ordering #1081 (@smfreegard)
1561
+ - Fix distance reporting to X-Haraka-GeoIP for geoip-lite #1086 (@smfreegard)
1562
+ - uribl: prevent calling next() more than 1x #1138 (@msimerson)
1563
+ - Fix so constants are imported when plugin is loaded from node_modules. #1133 (@bmonty)
1564
+ - Include STMP-code in bounce-reason string for upstream 5XX responses #1117 (@hatsebutz)
1565
+ - TLS fixes: add timed_out flag and karma should not run deny hook on it. #1109 (@smfreegard)
1566
+ - Fix port to number instead of string for HAProxy #1108 (@DarkSorrow)
1567
+ - Plugin dcc: fixed syntax error #1164 (@hatsebutz)
1568
+ - config: fix flat files if \r\n lines #1187 (@Dexus)
1569
+ - corrected hook_rcpt log code hook_rcpt_ok returns CONT
1570
+ - fix crash bug when loglevel = LOGDEBUG
1571
+ - corrected pathname in rcpt.ldap plugin (@abhas)
1572
+ - added helo.checks boolean for proto_mismatch
1573
+ - make rate_limit redis keys always expire @celesteking
1574
+ - dkim_sign: Buffer.concat expects an array of buffers
1575
+ - transaction: check discard_data before adding line end (@DarkSorrow)
1576
+ - fix 8-bit msg not displayed properly in gmail
1577
+ - fcrdns: always init results
1578
+ - TLS timer on error
1579
+ - dkim_verify: fixed timeout issue
1580
+ - smtp\_[proxy|forward]: correct authentication example
1581
+ - Fork child workers after init_master hook
1582
+ - connection: return 450/550 for plugin DENY\* (was 452/552)
1583
+ - spamassassin: don't call next() when transaction gone
1584
+ - outbound: fix crash when sending bounce mail
1585
+ - auth_base: fix bad protocol in auth_base.js #1121 (@Dexus)
1586
+ - outbound: Fix HELO/rDNS issue while using multiple outbound ip #1128 (@Dexus)
1587
+ - connection: Fix bug when client disconnect after sending data #1193
1588
+ - Fix connect.geoip bug #1144 (@smfreegard)
1589
+ - Fix tiny bug in messagesniffer #1198 (@smfreegard)
1590
+
1591
+ ### 2.6.1 - Mar 27, 2015
1592
+
1593
+ - added sedation timers for config file re-reading
1594
+ - Add AUTH support to outbound
1595
+ - tests/spf: quiet excessive DEBUG noise
1596
+ - allow domains with underscore
1597
+ - correct name of domains config file in access
1598
+ - Fix SMTP AUTH in smtp_forward/proxy and add docs
1599
+ - Fix opts not being passed to HMailItem \_bounce function
1600
+ - log.syslog will try strong-fork-syslog (for node 0.12 compat)
1601
+ - improvements to Plugin docs
1602
+ - rename net_utils.is_rfc1918 -> is_private_ip
1603
+ - IPv6 compat
1604
+ - test coverage
1605
+ - add IPv6 unique local fc00::/7
1606
+ - pre-populated config/plugins
1607
+ - added utils.extend, copies props onto objects
1608
+
1609
+ ### 2.6.0 - Feb 21, 2015
1610
+
1611
+ - other bug fixes
1612
+ - updated a few tests so test suite passes on Windows
1613
+ - log.syslog: handle failure to load node-syslog
1614
+ - plugin directory is $ENV definable (@martin1yness)
1615
+ - logging timestamps were static, fixed by @cloudbuy
1616
+ - queue/rabbitmq_amqplib, new plugin for RabbitMQ using amqplib (@esevece)
1617
+ - outbound:
1618
+ - plugins can set the outbound IP (during get_mx)
1619
+ - only replace line endings if not \r\n
1620
+ - bannering fixes
1621
+ - added support for per recipient routes
1622
+ - tls: don't register hooks upless certs exist
1623
+ - removed contrib/geolite-mirror-simple.pl (replaced by
1624
+ docs update pointing to maxmind-geolite-mirror)
1625
+ - rcpt.routes: new plugin by @msimerson
1626
+ - make haproxy IPv6 compatible
1627
+ - record_envelope_addresses: new plugin by @deburau
1628
+ - prevent_credential_leaks: new plugin by @smfreegard
1629
+ - config:
1630
+ - configfile: added .yaml support
1631
+ - improved config file 'watch' logic
1632
+ - Allow hyphens in params in config files (@abhas)
1633
+ - cached requests include options in cache key name
1634
+ - asn: updates for node 0.11 compat
1635
+ - dnsbl: use aysync.each vs forEach (avoid race condition)
1636
+ - spamassassin: improved config loading and test coverage
1637
+ - geoip: deprecate geoip-lite in favor of maxmind, IPv6 compatible
1638
+ - disable SSLv3 (due to POODLE)
1639
+ - dkim & spf, updates for node 0.11 compatibiilty
1640
+ - karma: move neighbor scoring from code to karma.ini
1641
+ - move excludes list to karma.ini
1642
+ - apply awards before adding message header & permit rejection at queue
1643
+ - karma.ini: score updates for access & uribl plugins
1644
+ - score denials issued by skipped plugins
1645
+ - add scores for specific DNSBLs
1646
+ - add transaction body filters (@chazomaticus)
1647
+ - change bannering to use them
1648
+ - helo.checks: fix timeout bug
1649
+ - match_re now validates and pre-compiles all REs
1650
+ - Add new proto_mismatch check
1651
+ - p0f: add register(), load config once, early
1652
+ - server: improved config handling
1653
+ - data.headers: add Delivered-To check
1654
+ - rcpt_to.ldap: new plugin by @abhas
1655
+ - smtp*client: only load tls*- when cfg.enable_tls
1656
+ - added plugins/host_list_base
1657
+ - Platform independent temp dir (thanks @martinvd)
1658
+ - move deprecated docs into docs/deprecated
1659
+ - Switch to Phusion baseimage instead of stock Ubuntu (thanks @Synchro)
1660
+ - dkim_verify: new plugin by @smfreegard
1661
+ - many new tests
1662
+ - improved URI parser (for URIBL plugin)
1663
+ - Allow mixed case STARTTLS command
1664
+ - Install Node via package manager (Mohd Rozi)
1665
+ - Fix a couple crit errors (@Illirgway)
1666
+ - Add noisy/bulk out-of-band rule support to MessaageSniffer plugin
1667
+ - initial support for rabbitmq plugin (@samuelharden)
1668
+ - bounce, added non_local_msgid checks and much faster lookups
1669
+ - vpopmail: fail faster during a CRAM-MD5 auth attempt with an invalid user
1670
+ - fcrdns: handle a null hostname
1671
+ - Improve HAProxy support code and documentation
1672
+ - tls: reworked for efficiency and linear style
1673
+ - access: test hostname validity before PSL lookup
1674
+ - load lists into objects (vs arrays), for much faster runtime access
1675
+ - host_list: huge performance increase, esp for many hosts
1676
+
1677
+ ### 2.5.0 - May 24, 2014
1678
+
1679
+ - added automated build testing via Travis-CI.org
1680
+ - fixed dkim_sign crash issue #560
1681
+ - geoip can discover external IP via net_utils.get_public_ip
1682
+ - geoip: skip private IPs
1683
+ - qmd: when relaying, validate MAIL FROM against QMD, add per-domain
1684
+ configurations, added reject option, added tests and bug fixes.
1685
+ - net_utils: added is_ipv4_literal, is_public_suffix, get_public_ip, added
1686
+ tests, shed some CamelCase.
1687
+ - asn: looksup up ASN of connection, uses 3 providers, tests providers, saves
1688
+ results, optionally adds headers. Includes tests.
1689
+ - access: new plugin that merges rdns_access, mail_from.access, and
1690
+ rcpt_to.access.
1691
+ - fcrdns: new plugin (Forward Confirmed Reverse DNS)
1692
+ - bounce: new plugin (merges
1693
+ - data.headers: new plugin added direct_to_mx, check & reject settings, added MLM detection,
1694
+ tests.
1695
+ - helo.checks: refactored, better config handling, new tests (match_rdns,
1696
+ mismatch, results), reject option.
1697
+ - results_store: store processing results in data structures (vs notes)
1698
+ - spf: refactored, added outbound checks when relaying, added 15 tests,
1699
+ - dnsbl: return errors as Error objects, reduce list to unique zones, added
1700
+ tests, added search=multi option, handle ENOTFOUND error, added reject=false option.
1701
+ - dns_list_base: bug fixes (race condition, returning invalid results)
1702
+ - bounce: refactored, each check has enable and reject switches, added tests,
1703
+ added bad_bounce_to
1704
+ - clamav: add virus name to results, better config parsing, typo fixes
1705
+ - uribl:
1706
+ - mf_resolvable:
1707
+ - tls: add link to wiki article on TLS setup
1708
+ - relay_acl: fix issue #428, refactored, don't crash when relay_dest_domains.ini
1709
+ missing, added tests
1710
+ - fix mx mechanism when no records are returned
1711
+ - vpopmaild: added per-domain feature
1712
+ - karma: added whitelist award, pass through temp (DENYSOFT) errors, made
1713
+ tarpit variable, configurable reject hooks, doc rewrite, ASN awards, fix penalty days calculation, new DSL for karma awards,
1714
+ - bannering fixes
1715
+ - added log\* stubs to test/fixtures/[plugin|connection]
1716
+ - tests/fixtures/stub_plugin: set name property
1717
+ - config: corrected handling of config.arg gets, fix caching bug, fix boolean
1718
+ handling, added missing 'type' handling.
1719
+ - Adding the option of using CIDR ranges in the haproxy_hosts file
1720
+ - tarpit: added config option hooks_to_delay, added docs
1721
+ - contrib/haraka.bsd.rc: startup file for \*BSD
1722
+ - Store attachment headers on stream
1723
+ - Record accepted domains at hook_rcpt and improve queue/lmtp
1724
+ - return after next() in the whitelist checks
1725
+ - Add new -o option to bin/haraka
1726
+
1727
+ ### 2.4.0 - Feb 12, 2014
1728
+
1729
+ - Trim whitespace when reading "list" type config files (such as config/plugins)
1730
+ - Added LMTP via queue/lmtp plugin
1731
+ - Fixed bug in outbound when temp failing some of the recipients that would prevent delivery working to those recipients for future delivery attempts
1732
+ - Add additional details/parameters to delivered hook for outbound mail
1733
+ - Removed the hmail.bounce_extra object as that information now stored with the rcpt_to list
1734
+ - Store the RCPT TO rejection reason on the address object
1735
+
1736
+ ### 2.3.0 - Feb 07, 2014
1737
+
1738
+ - Fix memory leak when watching config files for changes
1739
+ - Support for badly formatted MAIL FROM/RCPT TO lines
1740
+ - Fix a memory corruption when fixing line endings
1741
+ - Fix breakpoints in plugins when using node inspector
1742
+ - Reload config in relay_force_routing without restart
1743
+ - Don't re-attempt TLS upgrade if upgraded already and STARTTLS is re-advertised
1744
+ - Improved outbound logging
1745
+ - Pass failed recipients to bounce hook in outbound processing
1746
+ - Added startup checks to ensure Haraka has been installed correctly
1747
+ - Handle case of Haraka server running out of disk space better
1748
+ - In mail_from.is_resolvable: move re_bogus_ip into config
1749
+ - Added auth/auth_vpopmaild plugin - SMTP AUTH against a vpopmaild server
1750
+ - Fixed graph plugin to work with sqlite3
1751
+ - Added rcpt_to.qmail_deliverable plugin - Authenticate inbound RCPT TOs against Qmail::Deliverable daemon
1752
+ - Added data.headers plugin which merges header checks into one place.
1753
+ Deprecates data.noreceived, data.rfc5322_header_checks, and data.nomsgid.
1754
+ - Added documentation for logging system
1755
+ - Added DKIM per-domain signing support
1756
+ - Added p0f plugin
1757
+ - In relay_acl, if host is allowed by acl, don't deny the recipient because the domain isn't in the allow list
1758
+ - Add Authentication-Results header (RFC 5451) to all emails
1759
+ - Fixed writing the todo file in outbound for newer Node versions
1760
+ - Added Karma plugin to support penalizing consistently evil senders
1761
+ - Added GeoIP plugin including distance calculation from your mail server
1762
+ - Added bounce plugin for handling incoming bounce messages in various ways
1763
+ - Fix underscores in documentation so web version doesn't look so weird
1764
+ - By default prevent SMTP AUTH unless on a private IP or using TLS WARNING: May break some uses of Haraka, but is worth it for security
1765
+ - In lookup_rdns.strict, check whitelist before looking up IP
1766
+ - Big rewrite of the SpamAssassin plugin for simplicity and mainly to pass through X-Spam-\* headers provided
1767
+ - Added delay_deny plugin allowing more flexibility on when to reject mail
1768
+ - Improvements to ini file parsing allowing floats and negative integers, and specifying boolean keys
1769
+ - Fix issue causing a CRIT/crash with lost transaction/connection while sending inbound to ongoing SMTP server
1770
+ - Allow setting of spamd_user for spamassassin plugin
1771
+
1772
+ ### 2.0.0 - Nov 28, 2012
1773
+
1774
+ - Various fixes to SMTP AUTH code, including providing SMTP AUTH to inbound
1775
+ mail forwarders.
1776
+ - Updates to process_title plugin to show more details
1777
+ - Changed transaction.data_lines to a Stream (this will break all code which
1778
+ uses transaction.data_lines currently - see the migration guide)
1779
+ - Changed attachments to be a Stream (this will break some code which uses
1780
+ transaction.attachment_hooks - see the migration guide)
1781
+ - Capture and log signals sent to Haraka
1782
+ - Various performance improvements
1783
+ - Fixed a memory leak in connection pool
1784
+ - Improvements to TLS compatibility
1785
+ - RFC compliance improvements with greeting, EHLO/HELO, QUIT, and dot stuffing
1786
+ - Throw exception with set_banner as it is now non-functional. Will be returned in a future version.
1787
+ - Small fixes to data.uribl
1788
+
1789
+ [3.0.0]: https://github.com/haraka/Haraka/releases/tag/3.0.0
1790
+ [3.0.1]: https://github.com/haraka/Haraka/releases/tag/v3.0.1
1791
+ [3.0.2]: https://github.com/haraka/Haraka/releases/tag/v3.0.2
1792
+ [3.0.3]: https://github.com/haraka/Haraka/releases/tag/v3.0.3
1793
+ [3.0.4]: https://github.com/haraka/Haraka/releases/tag/3.0.4
1794
+ [3.0.5]: https://github.com/haraka/Haraka/releases/tag/v3.0.5
1795
+ [3.0.6]: https://github.com/haraka/Haraka/releases/tag/v3.0.6
1796
+ [2.8.0]: https://github.com/haraka/Haraka/releases/tag/v2.8.0
1797
+ [2.8.1]: https://github.com/haraka/Haraka/releases/tag/v2.8.1
1798
+ [2.8.3]: https://github.com/haraka/Haraka/releases/tag/v2.8.3
1799
+ [2.8.4]: https://github.com/haraka/Haraka/releases/tag/v2.8.4
1800
+ [2.8.5]: https://github.com/haraka/Haraka/releases/tag/v2.8.5
1801
+ [2.8.6]: https://github.com/haraka/Haraka/releases/tag/v2.8.6
1802
+ [2.8.7]: https://github.com/haraka/Haraka/releases/tag/v2.8.7
1803
+ [2.8.8]: https://github.com/haraka/Haraka/releases/tag/v2.8.8
1804
+ [2.8.9]: https://github.com/haraka/Haraka/releases/tag/v2.8.9
1805
+ [2.8.10]: https://github.com/haraka/Haraka/releases/tag/2.8.10
1806
+ [2.8.11]: https://github.com/haraka/Haraka/releases/tag/2.8.11
1807
+ [2.8.12]: https://github.com/haraka/Haraka/releases/tag/2.8.12
1808
+ [2.8.13]: https://github.com/haraka/Haraka/releases/tag/2.8.13
1809
+ [2.8.14]: https://github.com/haraka/Haraka/releases/tag/v2.8.14
1810
+ [2.8.15]: https://github.com/haraka/Haraka/releases/tag/2.8.15
1811
+ [2.8.16]: https://github.com/haraka/Haraka/releases/tag/2.8.16
1812
+ [2.8.17]: https://github.com/haraka/Haraka/releases/tag/2.8.17
1813
+ [2.8.18]: https://github.com/haraka/Haraka/releases/tag/2.8.18
1814
+ [2.8.19]: https://github.com/haraka/Haraka/releases/tag/v2.8.19
1815
+ [2.8.20]: https://github.com/haraka/Haraka/releases/tag/2.8.20
1816
+ [release-2.8.21]: https://github.com/haraka/Haraka/releases/tag/release-2.8.21
1817
+ [2.8.22]: https://github.com/haraka/Haraka/releases/tag/2.8.22
1818
+ [2.8.24]: https://github.com/haraka/Haraka/releases/tag/2.8.24
1819
+ [2.8.25]: https://github.com/haraka/Haraka/releases/tag/2.8.25
1820
+ [2.8.26]: https://github.com/haraka/Haraka/releases/tag/2.8.26
1821
+ [2.8.27]: https://github.com/haraka/Haraka/releases/tag/2.8.27
1822
+ [2.8.28]: https://github.com/haraka/Haraka/releases/tag/2.8.28
1823
+ [2.7.3]: https://github.com/haraka/Haraka/releases/tag/v2.7.3
1824
+ [2.7.2]: https://github.com/haraka/Haraka/releases/tag/v2.7.2
1825
+ [2.7.1]: https://github.com/haraka/Haraka/releases/tag/v2.7.1
1826
+ [2.7.0]: https://github.com/haraka/Haraka/releases/tag/v2.7.0
1827
+ [2.6.0]: https://github.com/haraka/Haraka/releases/tag/v2.6.0
1828
+ [2.6.1]: https://github.com/haraka/Haraka/releases/tag/v2.6.1
1829
+ [2.5.0]: https://github.com/haraka/Haraka/releases/tag/v2.5.0
1830
+ [2.4.0]: https://github.com/haraka/Haraka/releases/tag/v2.4.0
1831
+ [2.3.1]: https://github.com/haraka/Haraka/releases/tag/v2.3.1
1832
+ [2.3.0]: https://github.com/haraka/Haraka/releases/tag/v2.3.0
1833
+ [2.2.0]: https://github.com/haraka/Haraka/releases/tag/v2.2.0
1834
+ [2.2.1]: https://github.com/haraka/Haraka/releases/tag/v2.2.1
1835
+ [2.2.2]: https://github.com/haraka/Haraka/releases/tag/v2.2.2
1836
+ [2.2.3]: https://github.com/haraka/Haraka/releases/tag/v2.2.3
1837
+ [2.2.4]: https://github.com/haraka/Haraka/releases/tag/v2.2.4
1838
+ [2.2.5]: https://github.com/haraka/Haraka/releases/tag/v2.2.5
1839
+ [2.2.6]: https://github.com/haraka/Haraka/releases/tag/v2.2.6
1840
+ [2.2.7]: https://github.com/haraka/Haraka/releases/tag/v2.2.7
1841
+ [2.2.8]: https://github.com/haraka/Haraka/releases/tag/v2.2.8
1842
+ [2.1.0]: https://github.com/haraka/Haraka/releases/tag/v2.1.0
1843
+ [2.1.1]: https://github.com/haraka/Haraka/releases/tag/v2.1.1
1844
+ [2.1.2]: https://github.com/haraka/Haraka/releases/tag/v2.1.2
1845
+ [2.1.3]: https://github.com/haraka/Haraka/releases/tag/v2.1.3
1846
+ [2.1.4]: https://github.com/haraka/Haraka/releases/tag/v2.1.4
1847
+ [2.1.5]: https://github.com/haraka/Haraka/releases/tag/v2.1.5
1848
+ [2.1.6]: https://github.com/haraka/Haraka/releases/tag/v2.1.6
1849
+ [2.0.0]: https://github.com/haraka/Haraka/releases/tag/v2.0.0
1850
+ [2.0.3]: https://github.com/haraka/Haraka/releases/tag/v2.0.3
1851
+ [2.0.4]: https://github.com/haraka/Haraka/releases/tag/v2.0.4
1852
+ [2.0.5]: https://github.com/haraka/Haraka/releases/tag/v2.0.5
1853
+ [1.0.1]: https://github.com/haraka/Haraka/releases/tag/v1.0.1
1854
+ [1.0.2]: https://github.com/haraka/Haraka/releases/tag/v1.0.2
1855
+ [1.1.0]: https://github.com/haraka/Haraka/releases/tag/v1.1.0
1856
+ [1.2.0]: https://github.com/haraka/Haraka/releases/tag/v1.2.0
1857
+ [1.2.1]: https://github.com/haraka/Haraka/releases/tag/v1.2.1
1858
+ [1.3.0]: https://github.com/haraka/Haraka/releases/tag/v1.3.0
1859
+ [1.3.1]: https://github.com/haraka/Haraka/releases/tag/v1.3.1
1860
+ [1.3.2]: https://github.com/haraka/Haraka/releases/tag/v1.3.2
1861
+ [1.3.3]: https://github.com/haraka/Haraka/releases/tag/v1.3.3
1862
+ [1.4.0]: https://github.com/haraka/Haraka/releases/tag/v1.4.0
1863
+ [0.9.0]: https://github.com/haraka/Haraka/releases/tag/v0.9.0
1864
+ [0.8.0]: https://github.com/haraka/Haraka/releases/tag/v0.8.0
1865
+ [0.7.2]: https://github.com/haraka/Haraka/releases/tag/v0.7.2
1866
+ [0.7.1]: https://github.com/haraka/Haraka/releases/tag/v0.7.1
1867
+ [0.7.0]: https://github.com/haraka/Haraka/releases/tag/v0.7.0
1868
+ [0.6.1]: https://github.com/haraka/Haraka/releases/tag/v0.6.1
1869
+ [0.6.0]: https://github.com/haraka/Haraka/releases/tag/v0.6.0
1870
+ [0.5.11]: https://github.com/haraka/Haraka/releases/tag/v0.5.11
1871
+ [0.5.10]: https://github.com/haraka/Haraka/releases/tag/v0.5.10
1872
+ [0.5.9]: https://github.com/haraka/Haraka/releases/tag/v0.5.9
1873
+ [0.5.8]: https://github.com/haraka/Haraka/releases/tag/v0.5.8
1874
+ [0.5.7]: https://github.com/haraka/Haraka/releases/tag/v0.5.7
1875
+ [0.5.6]: https://github.com/haraka/Haraka/releases/tag/v0.5.6
1876
+ [0.5.5]: https://github.com/haraka/Haraka/releases/tag/v0.5.5
1877
+ [0.5.4]: https://github.com/haraka/Haraka/releases/tag/v0.5.4
1878
+ [0.5.3]: https://github.com/haraka/Haraka/releases/tag/v0.5.3
1879
+ [0.5.2]: https://github.com/haraka/Haraka/releases/tag/v0.5.2
1880
+ [0.5]: https://github.com/haraka/Haraka/releases/tag/v0.5
1881
+ [0.4]: https://github.com/haraka/Haraka/releases/tag/v0.4
1882
+ [0.3]: https://github.com/haraka/Haraka/releases/tag/v0.3
1883
+ [0.2]: https://github.com/haraka/Haraka/releases/tag/v0.2
1884
+ [3.1.1]: https://github.com/haraka/Haraka/releases/tag/v3.1.1
1885
+ [3.1.0]: https://github.com/haraka/Haraka/releases/tag/v3.1.0
1886
+ [3.1.2]: https://github.com/haraka/Haraka/releases/tag/v3.1.2
1887
+ [3.1.3]: https://github.com/haraka/Haraka/releases/tag/v3.1.3
1888
+ [3.1.4]: https://github.com/haraka/Haraka/releases/tag/v3.1.4
1889
+ [3.1.5]: https://github.com/haraka/Haraka/releases/tag/v3.1.5
1890
+ [3.1.6]: https://github.com/haraka/Haraka/releases/tag/v3.1.6
1891
+ [3.1.7]: https://github.com/haraka/Haraka/releases/tag/v3.1.7
1892
+ [3.2.0]: https://github.com/haraka/Haraka/releases/tag/v3.2.0
1893
+ [3.2.1]: https://github.com/haraka/Haraka/releases/tag/v3.2.1
1894
+ [3.3.0]: https://github.com/haraka/Haraka/releases/tag/v3.3.0