Haraka 3.1.3 → 3.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +2 -0
- package/CONTRIBUTORS.md +23 -1
- package/Changes.md +38 -0
- package/Plugins.md +81 -64
- package/README.md +1 -1
- package/bin/haraka +7 -5
- package/connection.js +15 -19
- package/docs/Plugins.md +1 -1
- package/docs/plugins/aliases.md +0 -2
- package/docs/plugins/queue/qmail-queue.md +0 -1
- package/logger.js +2 -2
- package/outbound/hmail.js +76 -83
- package/outbound/index.js +36 -34
- package/outbound/queue.js +231 -176
- package/package.json +25 -26
- package/plugins/prevent_credential_leaks.js +2 -2
- package/plugins/process_title.js +1 -1
- package/plugins/queue/smtp_forward.js +1 -1
- package/plugins/status.js +8 -5
- package/plugins/tls.js +1 -1
- package/plugins.js +19 -14
- package/rfc1869.js +10 -10
- package/run_tests +20 -2
- package/server.js +15 -10
- package/smtp_client.js +2 -9
- package/test/config/tls/haraka.local.pem +47 -47
- package/test/connection.js +286 -147
- package/test/fixtures/line_socket.js +1 -0
- package/test/fixtures/util_hmailitem.js +1 -1
- package/test/outbound/bounce_net_errors.js +176 -0
- package/test/outbound/bounce_rfc3464.js +303 -0
- package/test/outbound/hmail.js +140 -104
- package/test/outbound/index.js +61 -101
- package/test/outbound/qfile.js +25 -25
- package/test/outbound/queue.js +233 -0
- package/test/plugins/queue/smtp_forward.js +1 -1
- package/test/plugins/record_envelope_addresses.js +93 -0
- package/test/plugins/tls.js +2 -2
- package/test/plugins/xclient.js +137 -0
- package/test/rfc1869.js +43 -0
- package/test/smtp_client.js +6 -6
- package/test/transaction.js +486 -201
- package/tls_socket.js +3 -3
- package/transaction.js +33 -10
- package/config/rabbitmq.ini +0 -10
- package/config/rabbitmq_amqplib.ini +0 -19
- package/docs/plugins/queue/rabbitmq.md +0 -34
- package/docs/plugins/queue/rabbitmq_amqplib.md +0 -51
- package/plugins/queue/rabbitmq.js +0 -141
- package/plugins/queue/rabbitmq_amqplib.js +0 -96
- package/test/config/tls/ec.pem +0 -23
- package/test/config/tls/mismatched.pem +0 -49
- package/test/outbound_bounce_net_errors.js +0 -157
- package/test/outbound_bounce_rfc3464.js +0 -366
- package/test/tls_socket.js +0 -273
package/.prettierignore
CHANGED
package/CONTRIBUTORS.md
CHANGED
|
@@ -2,11 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
This handcrafted artisanal software is brought to you by:
|
|
4
4
|
|
|
5
|
-
| <img height="80" src="https://avatars.githubusercontent.com/u/261635?v=4"><br><a href="https://github.com/msimerson">msimerson</a> (<a href="https://github.com/haraka/Haraka/commits?author=msimerson">
|
|
5
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/261635?v=4"><br><a href="https://github.com/msimerson">msimerson</a> (<a href="https://github.com/haraka/Haraka/commits?author=msimerson">1662</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/662371?v=4"><br><a href="https://github.com/baudehlo">baudehlo</a> (<a href="https://github.com/haraka/Haraka/commits?author=baudehlo">969</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/550490?v=4"><br><a href="https://github.com/smfreegard">smfreegard</a> (<a href="https://github.com/haraka/Haraka/commits?author=smfreegard">794</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/959600?v=4"><br><a href="https://github.com/godsflaw">godsflaw</a> (<a href="https://github.com/haraka/Haraka/commits?author=godsflaw">171</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/934254?v=4"><br><a href="https://github.com/analogic">analogic</a> (<a href="https://github.com/haraka/Haraka/commits?author=analogic">42</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1674289?v=4"><br><a href="https://github.com/Dexus">Dexus</a> (<a href="https://github.com/haraka/Haraka/commits?author=Dexus">42</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/82041?v=4"><br><a href="https://github.com/gramakri">gramakri</a> (<a href="https://github.com/haraka/Haraka/commits?author=gramakri">40</a>)|
|
|
6
6
|
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
|
7
7
|
| <img height="80" src="https://avatars.githubusercontent.com/u/203240?v=4"><br><a href="https://github.com/lnedry">lnedry</a> (<a href="https://github.com/haraka/Haraka/commits?author=lnedry">27</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/748075?v=4"><br><a href="https://github.com/celesteking">celesteking</a> (<a href="https://github.com/haraka/Haraka/commits?author=celesteking">21</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/791972?v=4"><br><a href="https://github.com/lpatters">lpatters</a> (<a href="https://github.com/haraka/Haraka/commits?author=lpatters">20</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/366268?v=4"><br><a href="https://github.com/chazomaticus">chazomaticus</a> (<a href="https://github.com/haraka/Haraka/commits?author=chazomaticus">19</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/123708?v=4"><br><a href="https://github.com/arlolra">arlolra</a> (<a href="https://github.com/haraka/Haraka/commits?author=arlolra">16</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/271024?v=4"><br><a href="https://github.com/hayesgm">hayesgm</a> (<a href="https://github.com/haraka/Haraka/commits?author=hayesgm">16</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1573133?v=4"><br><a href="https://github.com/gauravaror">gauravaror</a> (<a href="https://github.com/haraka/Haraka/commits?author=gauravaror">14</a>)|
|
|
8
8
|
| <img height="80" src="https://avatars.githubusercontent.com/u/260607?v=4"><br><a href="https://github.com/typingArtist">typingArtist</a> (<a href="https://github.com/haraka/Haraka/commits?author=typingArtist">14</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/11343494?v=4"><br><a href="https://github.com/superman20">superman20</a> (<a href="https://github.com/haraka/Haraka/commits?author=superman20">13</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/158380?v=4"><br><a href="https://github.com/darkpixel">darkpixel</a> (<a href="https://github.com/haraka/Haraka/commits?author=darkpixel">12</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/9887966?v=4"><br><a href="https://github.com/KingNoosh">KingNoosh</a> (<a href="https://github.com/haraka/Haraka/commits?author=KingNoosh">11</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/5229495?v=4"><br><a href="https://github.com/tstonis">tstonis</a> (<a href="https://github.com/haraka/Haraka/commits?author=tstonis">10</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1746394?v=4"><br><a href="https://github.com/wltsmrz">wltsmrz</a> (<a href="https://github.com/haraka/Haraka/commits?author=wltsmrz">9</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/218741413?v=4"><br><a href="https://github.com/SamuelGrave">SamuelGrave</a> (<a href="https://github.com/haraka/Haraka/commits?author=SamuelGrave">9</a>)|
|
|
9
9
|
| <img height="80" src="https://avatars.githubusercontent.com/u/2176651?v=4"><br><a href="https://github.com/fatalbanana">fatalbanana</a> (<a href="https://github.com/haraka/Haraka/commits?author=fatalbanana">9</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/231081?v=4"><br><a href="https://github.com/EyePulp">EyePulp</a> (<a href="https://github.com/haraka/Haraka/commits?author=EyePulp">8</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/81561?v=4"><br><a href="https://github.com/Synchro">Synchro</a> (<a href="https://github.com/haraka/Haraka/commits?author=Synchro">8</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/3957811?v=4"><br><a href="https://github.com/gene-hightower">gene-hightower</a> (<a href="https://github.com/haraka/Haraka/commits?author=gene-hightower">7</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/8224508?v=4"><br><a href="https://github.com/DarkSorrow">DarkSorrow</a> (<a href="https://github.com/haraka/Haraka/commits?author=DarkSorrow">6</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/103802?v=4"><br><a href="https://github.com/joshuathayer">joshuathayer</a> (<a href="https://github.com/haraka/Haraka/commits?author=joshuathayer">6</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/298453?v=4"><br><a href="https://github.com/zllovesuki">zllovesuki</a> (<a href="https://github.com/haraka/Haraka/commits?author=zllovesuki">5</a>)|
|
|
10
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/132251?v=4"><br><a href="https://github.com/schamane">schamane</a> (<a href="https://github.com/haraka/Haraka/commits?author=schamane">5</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/2158203?v=4"><br><a href="https://github.com/luto">luto</a> (<a href="https://github.com/haraka/Haraka/commits?author=luto">5</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/21576638?v=4"><br><a href="https://github.com/steflw">steflw</a> (<a href="https://github.com/haraka/Haraka/commits?author=steflw">5</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1263856?v=4"><br><a href="https://github.com/ricardopolo">ricardopolo</a> (<a href="https://github.com/haraka/Haraka/commits?author=ricardopolo">5</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1521113?v=4"><br><a href="https://github.com/hontas">hontas</a> (<a href="https://github.com/haraka/Haraka/commits?author=hontas">5</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/918201?v=4"><br><a href="https://github.com/DoobleD">DoobleD</a> (<a href="https://github.com/haraka/Haraka/commits?author=DoobleD">4</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/11270?v=4"><br><a href="https://github.com/swerter">swerter</a> (<a href="https://github.com/haraka/Haraka/commits?author=swerter">4</a>)|
|
|
11
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/791835?v=4"><br><a href="https://github.com/Juerd">Juerd</a> (<a href="https://github.com/haraka/Haraka/commits?author=Juerd">4</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/5351045?v=4"><br><a href="https://github.com/rhedshi">rhedshi</a> (<a href="https://github.com/haraka/Haraka/commits?author=rhedshi">4</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/7155684?v=4"><br><a href="https://github.com/rw251">rw251</a> (<a href="https://github.com/haraka/Haraka/commits?author=rw251">4</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/255701?v=4"><br><a href="https://github.com/abhas">abhas</a> (<a href="https://github.com/haraka/Haraka/commits?author=abhas">4</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/147893?v=4"><br><a href="https://github.com/Andrew565">Andrew565</a> (<a href="https://github.com/haraka/Haraka/commits?author=Andrew565">4</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1451395?v=4"><br><a href="https://github.com/bmonty">bmonty</a> (<a href="https://github.com/haraka/Haraka/commits?author=bmonty">4</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/308887?v=4"><br><a href="https://github.com/benjisg">benjisg</a> (<a href="https://github.com/haraka/Haraka/commits?author=benjisg">4</a>)|
|
|
12
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/5624708?v=4"><br><a href="https://github.com/Bramzor">Bramzor</a> (<a href="https://github.com/haraka/Haraka/commits?author=Bramzor">4</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/8285462?v=4"><br><a href="https://github.com/CalgaryMichael">CalgaryMichael</a> (<a href="https://github.com/haraka/Haraka/commits?author=CalgaryMichael">4</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/34087?v=4"><br><a href="https://github.com/fredjean">fredjean</a> (<a href="https://github.com/haraka/Haraka/commits?author=fredjean">4</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/13922268?v=4"><br><a href="https://github.com/jdai8">jdai8</a> (<a href="https://github.com/haraka/Haraka/commits?author=jdai8">4</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/6220422?v=4"><br><a href="https://github.com/dcharbonnier">dcharbonnier</a> (<a href="https://github.com/haraka/Haraka/commits?author=dcharbonnier">3</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/232225?v=4"><br><a href="https://github.com/soncodi">soncodi</a> (<a href="https://github.com/haraka/Haraka/commits?author=soncodi">3</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/2115696?v=4"><br><a href="https://github.com/AuspeXeu">AuspeXeu</a> (<a href="https://github.com/haraka/Haraka/commits?author=AuspeXeu">3</a>)|
|
|
13
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/6684599?v=4"><br><a href="https://github.com/acharkizakaria">acharkizakaria</a> (<a href="https://github.com/haraka/Haraka/commits?author=acharkizakaria">3</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1810178?v=4"><br><a href="https://github.com/pvsousalima">pvsousalima</a> (<a href="https://github.com/haraka/Haraka/commits?author=pvsousalima">3</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/759912?v=4"><br><a href="https://github.com/davebeyer">davebeyer</a> (<a href="https://github.com/haraka/Haraka/commits?author=davebeyer">3</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/706078?v=4"><br><a href="https://github.com/brunolm">brunolm</a> (<a href="https://github.com/haraka/Haraka/commits?author=brunolm">3</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/7008027?v=4"><br><a href="https://github.com/mkp7">mkp7</a> (<a href="https://github.com/haraka/Haraka/commits?author=mkp7">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1007551?v=4"><br><a href="https://github.com/unquietwiki">unquietwiki</a> (<a href="https://github.com/haraka/Haraka/commits?author=unquietwiki">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/10368105?v=4"><br><a href="https://github.com/mtrivera">mtrivera</a> (<a href="https://github.com/haraka/Haraka/commits?author=mtrivera">2</a>)|
|
|
14
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/1829326?v=4"><br><a href="https://github.com/slattery">slattery</a> (<a href="https://github.com/haraka/Haraka/commits?author=slattery">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/8569238?v=4"><br><a href="https://github.com/MuraraAllan">MuraraAllan</a> (<a href="https://github.com/haraka/Haraka/commits?author=MuraraAllan">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/994004?v=4"><br><a href="https://github.com/stefanocoding">stefanocoding</a> (<a href="https://github.com/haraka/Haraka/commits?author=stefanocoding">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/5483299?v=4"><br><a href="https://github.com/thihara">thihara</a> (<a href="https://github.com/haraka/Haraka/commits?author=thihara">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/43457281?v=4"><br><a href="https://github.com/benjamonnguyen">benjamonnguyen</a> (<a href="https://github.com/haraka/Haraka/commits?author=benjamonnguyen">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/15035337?v=4"><br><a href="https://github.com/gtech99">gtech99</a> (<a href="https://github.com/haraka/Haraka/commits?author=gtech99">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/3073292?v=4"><br><a href="https://github.com/joelchornik">joelchornik</a> (<a href="https://github.com/haraka/Haraka/commits?author=joelchornik">2</a>)|
|
|
15
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/1249760?v=4"><br><a href="https://github.com/andreis">andreis</a> (<a href="https://github.com/haraka/Haraka/commits?author=andreis">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/15694566?v=4"><br><a href="https://github.com/apoorv-mishra">apoorv-mishra</a> (<a href="https://github.com/haraka/Haraka/commits?author=apoorv-mishra">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/934178?v=4"><br><a href="https://github.com/vrevo">vrevo</a> (<a href="https://github.com/haraka/Haraka/commits?author=vrevo">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/563469?v=4"><br><a href="https://github.com/niieani">niieani</a> (<a href="https://github.com/haraka/Haraka/commits?author=niieani">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/196198?v=4"><br><a href="https://github.com/hathaway">hathaway</a> (<a href="https://github.com/haraka/Haraka/commits?author=hathaway">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/14928995?v=4"><br><a href="https://github.com/carolinaknoll">carolinaknoll</a> (<a href="https://github.com/haraka/Haraka/commits?author=carolinaknoll">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/654682?v=4"><br><a href="https://github.com/martin1yness">martin1yness</a> (<a href="https://github.com/haraka/Haraka/commits?author=martin1yness">2</a>)|
|
|
16
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/4955052?v=4"><br><a href="https://github.com/chasent">chasent</a> (<a href="https://github.com/haraka/Haraka/commits?author=chasent">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1346804?v=4"><br><a href="https://github.com/louis-lau">louis-lau</a> (<a href="https://github.com/haraka/Haraka/commits?author=louis-lau">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/598809?v=4"><br><a href="https://github.com/tojocky">tojocky</a> (<a href="https://github.com/haraka/Haraka/commits?author=tojocky">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/5428603?v=4"><br><a href="https://github.com/Illirgway">Illirgway</a> (<a href="https://github.com/haraka/Haraka/commits?author=Illirgway">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/444769?v=4"><br><a href="https://github.com/dweekly">dweekly</a> (<a href="https://github.com/haraka/Haraka/commits?author=dweekly">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/48384?v=4"><br><a href="https://github.com/dalibor">dalibor</a> (<a href="https://github.com/haraka/Haraka/commits?author=dalibor">2</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/2956870?v=4"><br><a href="https://github.com/catroll">catroll</a> (<a href="https://github.com/haraka/Haraka/commits?author=catroll">1</a>)|
|
|
17
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/2609361?v=4"><br><a href="https://github.com/zereraz">zereraz</a> (<a href="https://github.com/haraka/Haraka/commits?author=zereraz">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/38491?v=4"><br><a href="https://github.com/darobin">darobin</a> (<a href="https://github.com/haraka/Haraka/commits?author=darobin">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/928787?v=4"><br><a href="https://github.com/Infern1">Infern1</a> (<a href="https://github.com/haraka/Haraka/commits?author=Infern1">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/11057526?v=4"><br><a href="https://github.com/Currerius">Currerius</a> (<a href="https://github.com/haraka/Haraka/commits?author=Currerius">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/6680615?v=4"><br><a href="https://github.com/ckcr4lyf">ckcr4lyf</a> (<a href="https://github.com/haraka/Haraka/commits?author=ckcr4lyf">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/857880?v=4"><br><a href="https://github.com/feisuzhu">feisuzhu</a> (<a href="https://github.com/haraka/Haraka/commits?author=feisuzhu">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/3337824?v=4"><br><a href="https://github.com/pvandijk">pvandijk</a> (<a href="https://github.com/haraka/Haraka/commits?author=pvandijk">1</a>)|
|
|
18
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/651048?v=4"><br><a href="https://github.com/Wesitos">Wesitos</a> (<a href="https://github.com/haraka/Haraka/commits?author=Wesitos">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/114246?v=4"><br><a href="https://github.com/pedroaxl">pedroaxl</a> (<a href="https://github.com/haraka/Haraka/commits?author=pedroaxl">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/600097?v=4"><br><a href="https://github.com/pstadler">pstadler</a> (<a href="https://github.com/haraka/Haraka/commits?author=pstadler">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/163142?v=4"><br><a href="https://github.com/patchlog">patchlog</a> (<a href="https://github.com/haraka/Haraka/commits?author=patchlog">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/109316?v=4"><br><a href="https://github.com/PAStheLoD">PAStheLoD</a> (<a href="https://github.com/haraka/Haraka/commits?author=PAStheLoD">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/3527052?v=4"><br><a href="https://github.com/pjeby">pjeby</a> (<a href="https://github.com/haraka/Haraka/commits?author=pjeby">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/11526146?v=4"><br><a href="https://github.com/noopnik">noopnik</a> (<a href="https://github.com/haraka/Haraka/commits?author=noopnik">1</a>)|
|
|
19
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/10524529?v=4"><br><a href="https://github.com/nmummau">nmummau</a> (<a href="https://github.com/haraka/Haraka/commits?author=nmummau">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1811410?v=4"><br><a href="https://github.com/blackrosezy">blackrosezy</a> (<a href="https://github.com/haraka/Haraka/commits?author=blackrosezy">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/913734?v=4"><br><a href="https://github.com/discretepackets">discretepackets</a> (<a href="https://github.com/haraka/Haraka/commits?author=discretepackets">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/69902?v=4"><br><a href="https://github.com/mfogel">mfogel</a> (<a href="https://github.com/haraka/Haraka/commits?author=mfogel">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/139480?v=4"><br><a href="https://github.com/mjpearson">mjpearson</a> (<a href="https://github.com/haraka/Haraka/commits?author=mjpearson">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/92839?v=4"><br><a href="https://github.com/mjackson">mjackson</a> (<a href="https://github.com/haraka/Haraka/commits?author=mjackson">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/19753510?v=4"><br><a href="https://github.com/michacassola">michacassola</a> (<a href="https://github.com/haraka/Haraka/commits?author=michacassola">1</a>)|
|
|
20
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/16570127?v=4"><br><a href="https://github.com/greenlighttec">greenlighttec</a> (<a href="https://github.com/haraka/Haraka/commits?author=greenlighttec">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/118732?v=4"><br><a href="https://github.com/mcreenan">mcreenan</a> (<a href="https://github.com/haraka/Haraka/commits?author=mcreenan">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/803496?v=4"><br><a href="https://github.com/mskrajnowski">mskrajnowski</a> (<a href="https://github.com/haraka/Haraka/commits?author=mskrajnowski">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/6382246?v=4"><br><a href="https://github.com/yeya">yeya</a> (<a href="https://github.com/haraka/Haraka/commits?author=yeya">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/18624942?v=4"><br><a href="https://github.com/jackwellsxyz">jackwellsxyz</a> (<a href="https://github.com/haraka/Haraka/commits?author=jackwellsxyz">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/115237?v=4"><br><a href="https://github.com/silverwind">silverwind</a> (<a href="https://github.com/haraka/Haraka/commits?author=silverwind">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/24767512?v=4"><br><a href="https://github.com/shurli">shurli</a> (<a href="https://github.com/haraka/Haraka/commits?author=shurli">1</a>)|
|
|
21
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/46054769?v=4"><br><a href="https://github.com/sathishvenkataraman">sathishvenkataraman</a> (<a href="https://github.com/haraka/Haraka/commits?author=sathishvenkataraman">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/8831920?v=4"><br><a href="https://github.com/qhxin">qhxin</a> (<a href="https://github.com/haraka/Haraka/commits?author=qhxin">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/18039170?v=4"><br><a href="https://github.com/pekapl">pekapl</a> (<a href="https://github.com/haraka/Haraka/commits?author=pekapl">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/4928168?v=4"><br><a href="https://github.com/nfnty">nfnty</a> (<a href="https://github.com/haraka/Haraka/commits?author=nfnty">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/21057453?v=4"><br><a href="https://github.com/inmula">inmula</a> (<a href="https://github.com/haraka/Haraka/commits?author=inmula">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/22168943?v=4"><br><a href="https://github.com/mathquis">mathquis</a> (<a href="https://github.com/haraka/Haraka/commits?author=mathquis">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/320906?v=4"><br><a href="https://github.com/martinvd">martinvd</a> (<a href="https://github.com/haraka/Haraka/commits?author=martinvd">1</a>)|
|
|
22
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/217669830?v=4"><br><a href="https://github.com/lmacayo">lmacayo</a> (<a href="https://github.com/haraka/Haraka/commits?author=lmacayo">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/181014?v=4"><br><a href="https://github.com/k2s">k2s</a> (<a href="https://github.com/haraka/Haraka/commits?author=k2s">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/650890?v=4"><br><a href="https://github.com/zombified">zombified</a> (<a href="https://github.com/haraka/Haraka/commits?author=zombified">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1024137?v=4"><br><a href="https://github.com/dhager7">dhager7</a> (<a href="https://github.com/haraka/Haraka/commits?author=dhager7">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/25018388?v=4"><br><a href="https://github.com/ayankel">ayankel</a> (<a href="https://github.com/haraka/Haraka/commits?author=ayankel">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/3277165?v=4"><br><a href="https://github.com/X-Ryl669">X-Ryl669</a> (<a href="https://github.com/haraka/Haraka/commits?author=X-Ryl669">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/952007?v=4"><br><a href="https://github.com/szepeviktor">szepeviktor</a> (<a href="https://github.com/haraka/Haraka/commits?author=szepeviktor">1</a>)|
|
|
23
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/20950126?v=4"><br><a href="https://github.com/varunzxzx">varunzxzx</a> (<a href="https://github.com/haraka/Haraka/commits?author=varunzxzx">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/95691?v=4"><br><a href="https://github.com/noogen">noogen</a> (<a href="https://github.com/haraka/Haraka/commits?author=noogen">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/209270?v=4"><br><a href="https://github.com/TimWolla">TimWolla</a> (<a href="https://github.com/haraka/Haraka/commits?author=TimWolla">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/29933243?v=4"><br><a href="https://github.com/tiagorlampert">tiagorlampert</a> (<a href="https://github.com/haraka/Haraka/commits?author=tiagorlampert">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/912257?v=4"><br><a href="https://github.com/tomscytale">tomscytale</a> (<a href="https://github.com/haraka/Haraka/commits?author=tomscytale">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/5239282?v=4"><br><a href="https://github.com/sriccio">sriccio</a> (<a href="https://github.com/haraka/Haraka/commits?author=sriccio">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/783006?v=4"><br><a href="https://github.com/samnegri">samnegri</a> (<a href="https://github.com/haraka/Haraka/commits?author=samnegri">1</a>)|
|
|
24
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/18592942?v=4"><br><a href="https://github.com/mnsilva">mnsilva</a> (<a href="https://github.com/haraka/Haraka/commits?author=mnsilva">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/44905?v=4"><br><a href="https://github.com/fcoelho">fcoelho</a> (<a href="https://github.com/haraka/Haraka/commits?author=fcoelho">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/8796466?v=4"><br><a href="https://github.com/erickpece">erickpece</a> (<a href="https://github.com/haraka/Haraka/commits?author=erickpece">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/354409?v=4"><br><a href="https://github.com/endreszabo">endreszabo</a> (<a href="https://github.com/haraka/Haraka/commits?author=endreszabo">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/548763?v=4"><br><a href="https://github.com/duanefields">duanefields</a> (<a href="https://github.com/haraka/Haraka/commits?author=duanefields">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/6936055?v=4"><br><a href="https://github.com/DomAmato">DomAmato</a> (<a href="https://github.com/haraka/Haraka/commits?author=DomAmato">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/26029735?v=4"><br><a href="https://github.com/lavieennoir">lavieennoir</a> (<a href="https://github.com/haraka/Haraka/commits?author=lavieennoir">1</a>)|
|
|
25
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/166466?v=4"><br><a href="https://github.com/dspangenberg">dspangenberg</a> (<a href="https://github.com/haraka/Haraka/commits?author=dspangenberg">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/100674?v=4"><br><a href="https://github.com/d--j">d--j</a> (<a href="https://github.com/haraka/Haraka/commits?author=d--j">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/81616?v=4"><br><a href="https://github.com/damoxc">damoxc</a> (<a href="https://github.com/haraka/Haraka/commits?author=damoxc">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/37262317?v=4"><br><a href="https://github.com/dkmaker">dkmaker</a> (<a href="https://github.com/haraka/Haraka/commits?author=dkmaker">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/805639?v=4"><br><a href="https://github.com/cbestall">cbestall</a> (<a href="https://github.com/haraka/Haraka/commits?author=cbestall">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/962436?v=4"><br><a href="https://github.com/txase">txase</a> (<a href="https://github.com/haraka/Haraka/commits?author=txase">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1430118?v=4"><br><a href="https://github.com/thetrompf">thetrompf</a> (<a href="https://github.com/haraka/Haraka/commits?author=thetrompf">1</a>)|
|
|
26
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/623363?v=4"><br><a href="https://github.com/bmatson">bmatson</a> (<a href="https://github.com/haraka/Haraka/commits?author=bmatson">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/47733?v=4"><br><a href="https://github.com/ardiesaeidi">ardiesaeidi</a> (<a href="https://github.com/haraka/Haraka/commits?author=ardiesaeidi">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/47601131?v=4"><br><a href="https://github.com/AprilGrimoire">AprilGrimoire</a> (<a href="https://github.com/haraka/Haraka/commits?author=AprilGrimoire">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/14093131?v=4"><br><a href="https://github.com/andbar">andbar</a> (<a href="https://github.com/haraka/Haraka/commits?author=andbar">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/2813838?v=4"><br><a href="https://github.com/amirkarimi">amirkarimi</a> (<a href="https://github.com/haraka/Haraka/commits?author=amirkarimi">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/332898?v=4"><br><a href="https://github.com/alessioalex">alessioalex</a> (<a href="https://github.com/haraka/Haraka/commits?author=alessioalex">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/124756761?v=4"><br><a href="https://github.com/littleslicebigcity">littleslicebigcity</a> (<a href="https://github.com/haraka/Haraka/commits?author=littleslicebigcity">1</a>)|
|
|
27
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/1177304?v=4"><br><a href="https://github.com/mildsunrise">mildsunrise</a> (<a href="https://github.com/haraka/Haraka/commits?author=mildsunrise">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/30565?v=4"><br><a href="https://github.com/ajimix">ajimix</a> (<a href="https://github.com/haraka/Haraka/commits?author=ajimix">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/58205701?v=4"><br><a href="https://github.com/adarshasp87">adarshasp87</a> (<a href="https://github.com/haraka/Haraka/commits?author=adarshasp87">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/284925?v=4"><br><a href="https://github.com/64kps">64kps</a> (<a href="https://github.com/haraka/Haraka/commits?author=64kps">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/6890321?v=4"><br><a href="https://github.com/httpstersk">httpstersk</a> (<a href="https://github.com/haraka/Haraka/commits?author=httpstersk">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/28440072?v=4"><br><a href="https://github.com/leadbi">leadbi</a> (<a href="https://github.com/haraka/Haraka/commits?author=leadbi">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/22004482?v=4"><br><a href="https://github.com/kajes">kajes</a> (<a href="https://github.com/haraka/Haraka/commits?author=kajes">1</a>)|
|
|
28
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/51789698?v=4"><br><a href="https://github.com/Young-Lord">Young-Lord</a> (<a href="https://github.com/haraka/Haraka/commits?author=Young-Lord">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/11235022?v=4"><br><a href="https://github.com/kzub">kzub</a> (<a href="https://github.com/haraka/Haraka/commits?author=kzub">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/510957?v=4"><br><a href="https://github.com/kevinmartin">kevinmartin</a> (<a href="https://github.com/haraka/Haraka/commits?author=kevinmartin">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/75720?v=4"><br><a href="https://github.com/kgoess">kgoess</a> (<a href="https://github.com/haraka/Haraka/commits?author=kgoess">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/5689132?v=4"><br><a href="https://github.com/mr-karan">mr-karan</a> (<a href="https://github.com/haraka/Haraka/commits?author=mr-karan">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/7114909?v=4"><br><a href="https://github.com/tyranron">tyranron</a> (<a href="https://github.com/haraka/Haraka/commits?author=tyranron">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/49093?v=4"><br><a href="https://github.com/jplock">jplock</a> (<a href="https://github.com/haraka/Haraka/commits?author=jplock">1</a>)|
|
|
29
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/411338?v=4"><br><a href="https://github.com/josteink">josteink</a> (<a href="https://github.com/haraka/Haraka/commits?author=josteink">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/646768?v=4"><br><a href="https://github.com/nebulade">nebulade</a> (<a href="https://github.com/haraka/Haraka/commits?author=nebulade">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/6860647?v=4"><br><a href="https://github.com/GuroKung">GuroKung</a> (<a href="https://github.com/haraka/Haraka/commits?author=GuroKung">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/2649838?v=4"><br><a href="https://github.com/stanek0j">stanek0j</a> (<a href="https://github.com/haraka/Haraka/commits?author=stanek0j">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/55651?v=4"><br><a href="https://github.com/jaredj">jaredj</a> (<a href="https://github.com/haraka/Haraka/commits?author=jaredj">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/397735?v=4"><br><a href="https://github.com/jrb">jrb</a> (<a href="https://github.com/haraka/Haraka/commits?author=jrb">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/1560587?v=4"><br><a href="https://github.com/jkroepke">jkroepke</a> (<a href="https://github.com/haraka/Haraka/commits?author=jkroepke">1</a>)|
|
|
30
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/5376280?v=4"><br><a href="https://github.com/Chopinsky">Chopinsky</a> (<a href="https://github.com/haraka/Haraka/commits?author=Chopinsky">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/195918?v=4"><br><a href="https://github.com/hperrin">hperrin</a> (<a href="https://github.com/haraka/Haraka/commits?author=hperrin">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/376721?v=4"><br><a href="https://github.com/urlund">urlund</a> (<a href="https://github.com/haraka/Haraka/commits?author=urlund">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/7700727?v=4"><br><a href="https://github.com/gwieshammer">gwieshammer</a> (<a href="https://github.com/haraka/Haraka/commits?author=gwieshammer">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/914107?v=4"><br><a href="https://github.com/gpetrioli">gpetrioli</a> (<a href="https://github.com/haraka/Haraka/commits?author=gpetrioli">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/140875?v=4"><br><a href="https://github.com/fabiob">fabiob</a> (<a href="https://github.com/haraka/Haraka/commits?author=fabiob">1</a>)| <img height="80" src="https://avatars.githubusercontent.com/u/400795?v=4"><br><a href="https://github.com/felixrabe">felixrabe</a> (<a href="https://github.com/haraka/Haraka/commits?author=felixrabe">1</a>)|
|
|
31
|
+
| <img height="80" src="https://avatars.githubusercontent.com/u/48409110?v=4"><br><a href="https://github.com/felixauringer">felixauringer</a> (<a href="https://github.com/haraka/Haraka/commits?author=felixauringer">1</a>)
|
|
10
32
|
|
|
11
33
|
<sub>this file is generated by [.release](https://github.com/msimerson/.release).
|
|
12
34
|
Contribute to this project to get your GitHub profile included here.</sub>
|
package/Changes.md
CHANGED
|
@@ -4,6 +4,43 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
|
|
|
4
4
|
|
|
5
5
|
### Unreleased
|
|
6
6
|
|
|
7
|
+
### [3.1.4] - 2026-03-30
|
|
8
|
+
|
|
9
|
+
#### Fixed
|
|
10
|
+
|
|
11
|
+
- fix: add ensure_body for late parse_body=true #3539
|
|
12
|
+
- fix(outbound): prevent ERR_UNHANDLED_ERROR crash #3538
|
|
13
|
+
- fix(txn): more robust handling of body filter additions #3537
|
|
14
|
+
- fix(conn): avoid connection fault when 2x QUIT sent #3536
|
|
15
|
+
- fix(txn): more robust handling of broken messages #3535
|
|
16
|
+
- fix(connection): pause after odd SMTP command sequence #3525
|
|
17
|
+
|
|
18
|
+
#### Changed
|
|
19
|
+
|
|
20
|
+
- sunset: remove dot_stuffing (now dot_stuffed)
|
|
21
|
+
- chore(plugins): deleted deprecated core_require
|
|
22
|
+
- dep(rabbitmq): repackaged as NPM module #3526
|
|
23
|
+
- deps(all): bump versions
|
|
24
|
+
- doc(Plugins): add sections filter, enrichment, and logging #3534
|
|
25
|
+
- added dropbox-plugin #3543
|
|
26
|
+
- es2024: #3527, #3528
|
|
27
|
+
- outbound replace fs callback with promises and async/await #3528
|
|
28
|
+
- dep(async): remove dep by replacing async.map with Queue
|
|
29
|
+
- use startsWith instead of indexOf === 0
|
|
30
|
+
- use spread syntax instead of [].concat and {}.assign
|
|
31
|
+
- use implicit arrow function returns
|
|
32
|
+
- replace deprecated substr with slice or substring
|
|
33
|
+
- test: fixes for test-fixtures 1.4 & local plugins that do require('./')
|
|
34
|
+
- outbound/queue: added tests #3531
|
|
35
|
+
- TL;DR: bundled plugins don't need a special require any more
|
|
36
|
+
- fixtures/plugin behaves more like real one, test accordingly
|
|
37
|
+
- refactored connection, transaction, and outbound to `node --test` #3541
|
|
38
|
+
- transaction.js (48 → 62 tests)
|
|
39
|
+
- connection.js (24 → 51 tests)
|
|
40
|
+
- moved ./test/outbound_* to ./test/outbound/, and fixed race conditions
|
|
41
|
+
- move TLS tests to haraka-tls #3542
|
|
42
|
+
- improve coverage for transaction, rfc1869, xclient, and record_envelope_addresses #3524
|
|
43
|
+
|
|
7
44
|
### [3.1.3] - 2026-02-06
|
|
8
45
|
|
|
9
46
|
- deps(graph): removed, sqlite3 library is unmaintained
|
|
@@ -1759,3 +1796,4 @@ config files.
|
|
|
1759
1796
|
[3.1.0]: https://github.com/haraka/Haraka/releases/tag/v3.1.0
|
|
1760
1797
|
[3.1.2]: https://github.com/haraka/Haraka/releases/tag/v3.1.2
|
|
1761
1798
|
[3.1.3]: https://github.com/haraka/Haraka/releases/tag/v3.1.3
|
|
1799
|
+
[3.1.4]: https://github.com/haraka/Haraka/releases/tag/v3.1.4
|
package/Plugins.md
CHANGED
|
@@ -35,6 +35,52 @@ A comprehensive list of known plugins. Create a PR to add yours to these lists.
|
|
|
35
35
|
| [opendkim][url-opendkim] | DKIM sign and verify email messages |
|
|
36
36
|
| [spf][url-spf] | Perform SPF checks |
|
|
37
37
|
|
|
38
|
+
### Enrichment Plugins
|
|
39
|
+
|
|
40
|
+
| Name | Description |
|
|
41
|
+
| ------------------------------ | ------------------------------------------ |
|
|
42
|
+
| [ASN][url-asn] | Get ASN info for remote senders |
|
|
43
|
+
| [fcrdns][url-fcrdns] | Forward Confirmed reverse DNS |
|
|
44
|
+
| [geoip][url-geoip] | get geographic information about mail senders |
|
|
45
|
+
| [p0f][url-p0f] | TCP Fingerprinting |
|
|
46
|
+
| [karma][url-karma] | Dynamic scoring of incoming connections |
|
|
47
|
+
| [known-senders][url-known-senders] | Reward emails from those you send mail to |
|
|
48
|
+
| [record_envelope_addresses][url-recordenv] | Adds message headers with ENV recips |
|
|
49
|
+
|
|
50
|
+
### Filtering Plugins
|
|
51
|
+
|
|
52
|
+
| Name | Description |
|
|
53
|
+
| ------------------------------ | ------------------------------------------ |
|
|
54
|
+
| [attachment][url-attach] | Restrict attachment types |
|
|
55
|
+
| [block_me][url-blockme] | Populate block list via forwarded emails |
|
|
56
|
+
| [avg][url-avg] | AVG antivirus scanner |
|
|
57
|
+
| [clamd][url-clamd] | Anti-Virus scanning with ClamAV |
|
|
58
|
+
| [data.signatures][url-sigs] | Block emails whose bodies match signatures |
|
|
59
|
+
| [dcc][url-dcc] | Distributed Checksum Clearinghouse |
|
|
60
|
+
| [dns-list][url-dns-list] | Check against DNS and reputation lists |
|
|
61
|
+
| [early_talker][url-early] | Reject remotes that talk early |
|
|
62
|
+
| [esets][url-esets] | Virus scanning with ESET Mail Security |
|
|
63
|
+
| [greylist][url-greylist] | Greylisting |
|
|
64
|
+
| [helo.checks][url-helo] | Validity checks of the HELO string |
|
|
65
|
+
| [mail_from.is_resolvable][url-mfres] | Verifies the MAIL FROM domain resolves to a MX |
|
|
66
|
+
| [messagesniffer][url-msgsniff] | Anti-spam via [MessageSniffer][url-ms] |
|
|
67
|
+
| [milter][url-milter] | milter support |
|
|
68
|
+
| [rspamd][url-rspamd] | Scan emails with rspamd |
|
|
69
|
+
| [spamassassin][url-spamass] | Scan emails with SpamAssassin |
|
|
70
|
+
| [uribl][url-uribl] | Block based on URI blacklists |
|
|
71
|
+
|
|
72
|
+
### Logging & Telemetry
|
|
73
|
+
|
|
74
|
+
| Name | Description |
|
|
75
|
+
| -------------------------------- | ------------------------------------------------------------------------ |
|
|
76
|
+
| [accounting_files][url-acc-files] | Retrieve, Store and Archive custom information of outbound traffic |
|
|
77
|
+
| [elasticsearch][url-elastic] | Store message metadata in Elasticsearch |
|
|
78
|
+
| [log reader][url-logreader] | extract log entries from the haraka log file |
|
|
79
|
+
| [outbound-logger][url-outbound-logger] | JSON logging of outbound email. Logs metadata about delivered/bounced emails |
|
|
80
|
+
| [process_title][url-proctitle] | Populate `ps` output with activity counters |
|
|
81
|
+
| [syslog][url-syslog] | Log to syslog |
|
|
82
|
+
| [watch][url-watch] | Watch live SMTP traffic in a web interface |
|
|
83
|
+
|
|
38
84
|
### Queue Plugins
|
|
39
85
|
|
|
40
86
|
| Name | Description |
|
|
@@ -53,72 +99,43 @@ A comprehensive list of known plugins. Create a PR to add yours to these lists.
|
|
|
53
99
|
| [smtp_proxy][url-qproxy] | Proxy SMTP connections to another MTA |
|
|
54
100
|
| [wildduck][url-wildduck] | queue messages to Wild Duck |
|
|
55
101
|
|
|
56
|
-
###
|
|
102
|
+
### Recipient Validation
|
|
57
103
|
|
|
58
|
-
| Name
|
|
59
|
-
|
|
|
60
|
-
| [
|
|
61
|
-
| [
|
|
62
|
-
| [
|
|
63
|
-
| [
|
|
64
|
-
| [
|
|
65
|
-
| [
|
|
66
|
-
| [
|
|
67
|
-
| [
|
|
68
|
-
| [
|
|
69
|
-
| [spamassassin][url-spamass] | Scan emails with SpamAssassin |
|
|
70
|
-
| [uribl][url-uribl] | Block based on URI blacklists |
|
|
104
|
+
| Name | Description |
|
|
105
|
+
| -----------------------------------| ----------------------------------------------------- |
|
|
106
|
+
| [dovecot][url-dovecot] | Recipient validation & SMTP AUTH against dovecot |
|
|
107
|
+
| [LDAP][url-ldap] | Aliases, Auth, and Recipient validation from LDAP |
|
|
108
|
+
| [recipient-routes][url-rroutes] | Route emails based on their recipient(s) |
|
|
109
|
+
| [rcpt_to.in_host_list][url-rhost] | Define local email domains in a file |
|
|
110
|
+
| [rcpt_to.ldap][url-rcpt-ldap] | Validate recipients against LDAP |
|
|
111
|
+
| [rcpt-postgresql][url-postgres] | validate recipients against PostgreSQL |
|
|
112
|
+
| [qmail-deliverable][url-rqmd] | Validate recipients against Qmail-Deliverable |
|
|
113
|
+
| [vmta][url-vmta] | Virtual MTA management |
|
|
114
|
+
| [wildduck][url-wildduck] | provides recipient checks against Wild Duck |
|
|
71
115
|
|
|
72
116
|
### Every other Plugin
|
|
73
117
|
|
|
74
|
-
| Name | Description
|
|
75
|
-
| ------------------------------------------ |
|
|
76
|
-
| [access][url-access] | ACLs based on IPs, domains, email addrs, etc.
|
|
77
|
-
| [
|
|
78
|
-
| [
|
|
79
|
-
| [
|
|
80
|
-
| [
|
|
81
|
-
| [
|
|
82
|
-
| [
|
|
83
|
-
| [
|
|
84
|
-
| [
|
|
85
|
-
| [
|
|
86
|
-
| [
|
|
87
|
-
| [
|
|
88
|
-
| [
|
|
89
|
-
| [
|
|
90
|
-
| [
|
|
91
|
-
| [
|
|
92
|
-
| [
|
|
93
|
-
| [
|
|
94
|
-
| [
|
|
95
|
-
| [elasticsearch][url-elastic] | Store message metadata in Elasticsearch |
|
|
96
|
-
| [log reader][url-logreader] | extract log entries from the haraka log file |
|
|
97
|
-
| [syslog][url-syslog] | Log to syslog |
|
|
98
|
-
| [mail_from.is_resolvable][url-mfres] | Verifies the MAIL FROM domain resolves to a MX |
|
|
99
|
-
| [outbound-logger][url-outbound-logger] | JSON logging of outbound email traffic. Logs useful metadata about delivered/bounced emails |
|
|
100
|
-
| [p0f][url-p0f] | TCP Fingerprinting |
|
|
101
|
-
| [prevent_credential_leaks][url-creds] | Prevent users from emailing their credentials |
|
|
102
|
-
| [process_title][url-proctitle] | Populate `ps` output with activity counters |
|
|
103
|
-
| [recipient-routes][url-rroutes] | Route emails based on their recipient(s) |
|
|
104
|
-
| [redis][url-redis] | multi-purpose Redis db connection(s) |
|
|
105
|
-
| [rcpt_to.in_host_list][url-rhost] | Define local email domains in a file |
|
|
106
|
-
| [rcpt_to.ldap][url-rcpt-ldap] | Validate recipients against LDAP |
|
|
107
|
-
| [rcpt-postgresql][url-postgres] | validate recipients against PostgreSQL |
|
|
108
|
-
| [qmail-deliverable][url-rqmd] | Validate recipients against Qmail-Deliverable |
|
|
109
|
-
| [record_envelope_addresses][url-recordenv] | Adds message headers with ENV recips |
|
|
110
|
-
| [relay][url-relay] | Manage relay permissions |
|
|
111
|
-
| [reseed_rng][url-rng] | Reseed the RNG |
|
|
112
|
-
| [batv-srs][url-batv] | BATV & SRS |
|
|
113
|
-
| [srs][url-srs] | Sender Rewriting Scheme |
|
|
114
|
-
| [tarpit][url-tarpit] | Slow down connections |
|
|
115
|
-
| [tls][url-tls] | Implements TLS |
|
|
116
|
-
| [toobusy][url-toobusy] | Defers connections when too busy |
|
|
117
|
-
| [vmta][url-vmta] | Virtual MTA management |
|
|
118
|
-
| [watch][url-watch] | Watch live SMTP traffic in a web interface |
|
|
119
|
-
| [wildduck][url-wildduck] | provides recipient checks against Wild Duck |
|
|
120
|
-
| [xclient][url-xclient] | Implements XCLIENT |
|
|
121
|
-
| [save-sent][url-save-sent] | Save sent emails on the serverside to a mailbox of the sender |
|
|
118
|
+
| Name | Description |
|
|
119
|
+
| ------------------------------------------ | --------------------------------------------------------------- |
|
|
120
|
+
| [access][url-access] | ACLs based on IPs, domains, email addrs, etc. |
|
|
121
|
+
| [aliases][url-aliases] | Email aliases |
|
|
122
|
+
| [bounce][url-bounce] | Many options for bounce processing |
|
|
123
|
+
| [delay_deny][url-delay] | Delays all pre-DATA 'deny' results |
|
|
124
|
+
| [dovecot][url-dovecot] | Recipient validation & SMTP AUTH against dovecot |
|
|
125
|
+
| [headers][url-headers] | Inspect and verify various email headers |
|
|
126
|
+
| [Limit][url-limit] | Apply many types of limits to SMTP connections |
|
|
127
|
+
| [prevent_credential_leaks][url-creds] | Prevent users from emailing their credentials |
|
|
128
|
+
| [redis][url-redis] | multi-purpose Redis db connection(s) |
|
|
129
|
+
| [relay][url-relay] | Manage relay permissions |
|
|
130
|
+
| [reseed_rng][url-rng] | Reseed the RNG |
|
|
131
|
+
| [batv-srs][url-batv] | BATV & SRS |
|
|
132
|
+
| [srs][url-srs] | Sender Rewriting Scheme |
|
|
133
|
+
| [tarpit][url-tarpit] | Slow down connections |
|
|
134
|
+
| [tls][url-tls] | Implements TLS |
|
|
135
|
+
| [toobusy][url-toobusy] | Defers connections when too busy |
|
|
136
|
+
| [xclient][url-xclient] | Implements XCLIENT |
|
|
137
|
+
| [save-sent][url-save-sent] | Save sent emails on the serverside to a mailbox of the sender |
|
|
138
|
+
| [dropbox][url-dropbox] | Forward incoming emails to configured Dropbox webhook URLs. |
|
|
122
139
|
|
|
123
140
|
<!-- URLs tucked safely out of the way -->
|
|
124
141
|
|
|
@@ -178,8 +195,7 @@ A comprehensive list of known plugins. Create a PR to add yours to these lists.
|
|
|
178
195
|
[url-qlmtp]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/lmtp.md
|
|
179
196
|
[url-qmail]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/qmail-queue.md
|
|
180
197
|
[url-qquart]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/quarantine.md
|
|
181
|
-
[url-qrabbit]: https://github.com/haraka/
|
|
182
|
-
[url-qrabbita]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/rabbitmq_amqplib.md
|
|
198
|
+
[url-qrabbit]: https://github.com/haraka/haraka-plugin-queue-rabbitmq
|
|
183
199
|
[url-qbridge]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/smtp_bridge.md
|
|
184
200
|
[url-qforward]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/smtp_forward.md
|
|
185
201
|
[url-qproxy]: https://github.com/haraka/Haraka/blob/master/docs/plugins/queue/smtp_proxy.md
|
|
@@ -208,3 +224,4 @@ A comprehensive list of known plugins. Create a PR to add yours to these lists.
|
|
|
208
224
|
[url-kafka]: https://github.com/benjamonnguyen/haraka-plugin-queue-kafka
|
|
209
225
|
[url-mailauth]: https://www.npmjs.com/package/haraka-plugin-mailauth
|
|
210
226
|
[url-save-sent]: https://github.com/AprilGrimoire/haraka-plugin-save-sent
|
|
227
|
+
[url-dropbox]: https://github.com/dspangenberg/haraka-plugin-dropbox
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ in asynchronous JS and are very fast.
|
|
|
10
10
|
|
|
11
11
|
Haraka has very good spam protection (see [plugins][4]) and works
|
|
12
12
|
well as a filtering [MTA][3]. It also works well as a [MSA][5] running on
|
|
13
|
-
port 587 with auth and [
|
|
13
|
+
port 587 with auth and [dkim][6] plugins enabled.
|
|
14
14
|
|
|
15
15
|
Haraka makes no attempt to be a mail store (like Exchange or Postfix/Exim/Qmail),
|
|
16
16
|
a [LDA][7], nor an IMAP server (like Dovecot or Courier). Haraka is
|
package/bin/haraka
CHANGED
|
@@ -286,7 +286,7 @@ if (parsed.version) {
|
|
|
286
286
|
if (process.env.PAGER) {
|
|
287
287
|
const pager_split = process.env.PAGER.split(/ +/)
|
|
288
288
|
pager = pager_split.shift()
|
|
289
|
-
md_path = pager_split
|
|
289
|
+
md_path = [...pager_split, ...md_path]
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
const less = child.spawn(pager, md_path, { stdio: 'inherit' })
|
|
@@ -310,7 +310,8 @@ if (parsed.version) {
|
|
|
310
310
|
logger = require(path.join(base, 'logger'))
|
|
311
311
|
if (!parsed.verbose) logger.log = noop // disable logging
|
|
312
312
|
outbound = require(path.join(base, 'outbound'))
|
|
313
|
-
|
|
313
|
+
;(async () => {
|
|
314
|
+
const qlist = await outbound.list_queue()
|
|
314
315
|
for (const todo of qlist) {
|
|
315
316
|
console.log(
|
|
316
317
|
sprintf(
|
|
@@ -323,7 +324,7 @@ if (parsed.version) {
|
|
|
323
324
|
)
|
|
324
325
|
}
|
|
325
326
|
process.exit()
|
|
326
|
-
})
|
|
327
|
+
})()
|
|
327
328
|
} else if (parsed.qstat) {
|
|
328
329
|
if (!parsed.configs) fail('qstat option requires config path')
|
|
329
330
|
|
|
@@ -331,10 +332,11 @@ if (parsed.version) {
|
|
|
331
332
|
logger = require(path.join(base, 'logger'))
|
|
332
333
|
if (!parsed.verbose) logger.log = noop // disable logging
|
|
333
334
|
outbound = require(path.join(base, 'outbound'))
|
|
334
|
-
|
|
335
|
+
;(async () => {
|
|
336
|
+
const stats = await outbound.stat_queue()
|
|
335
337
|
console.log(stats)
|
|
336
338
|
process.exit()
|
|
337
|
-
})
|
|
339
|
+
})()
|
|
338
340
|
} else if (parsed.qunstick) {
|
|
339
341
|
if (!parsed.configs) fail('qunstick option requires config path')
|
|
340
342
|
const domain = parsed.qunstick.toLowerCase()
|
package/connection.js
CHANGED
|
@@ -191,11 +191,7 @@ class Connection {
|
|
|
191
191
|
})
|
|
192
192
|
|
|
193
193
|
const ha_list = net.isIPv6(self.remote.ip) ? haproxy_hosts_ipv6 : haproxy_hosts_ipv4
|
|
194
|
-
if (
|
|
195
|
-
ha_list.some((element, index, array) => {
|
|
196
|
-
return ipaddr.parse(self.remote.ip).match(element[0], element[1])
|
|
197
|
-
})
|
|
198
|
-
) {
|
|
194
|
+
if (ha_list.some((element) => ipaddr.parse(self.remote.ip).match(element[0], element[1]))) {
|
|
199
195
|
self.proxy.allowed = true
|
|
200
196
|
// Wait for PROXY command
|
|
201
197
|
self.proxy.timer = setTimeout(() => {
|
|
@@ -302,7 +298,7 @@ class Connection {
|
|
|
302
298
|
/* eslint no-control-regex: 0 */
|
|
303
299
|
if (/[^\x00-\x7F]/.test(this.current_line)) {
|
|
304
300
|
// See if this is a TLS handshake
|
|
305
|
-
const buf = Buffer.from(this.current_line.
|
|
301
|
+
const buf = Buffer.from(this.current_line.slice(0, 3), 'binary')
|
|
306
302
|
if (
|
|
307
303
|
buf[0] === 0x16 &&
|
|
308
304
|
buf[1] === 0x03 &&
|
|
@@ -348,10 +344,13 @@ class Connection {
|
|
|
348
344
|
} else if (this.state === states.LOOP) {
|
|
349
345
|
// Allow QUIT
|
|
350
346
|
if (this.current_line.toUpperCase() === 'QUIT') {
|
|
347
|
+
this.state = states.PAUSE_SMTP
|
|
351
348
|
this.cmd_quit()
|
|
352
349
|
} else {
|
|
353
350
|
this.respond(this.loop_code, this.loop_msg)
|
|
354
351
|
}
|
|
352
|
+
} else if (this.state === states.PAUSE_SMTP) {
|
|
353
|
+
// Do nothing
|
|
355
354
|
} else {
|
|
356
355
|
throw new Error(`unknown state ${this.state}`)
|
|
357
356
|
}
|
|
@@ -516,9 +515,7 @@ class Connection {
|
|
|
516
515
|
} else {
|
|
517
516
|
messages = msg.slice()
|
|
518
517
|
}
|
|
519
|
-
messages = messages.filter((msg2) =>
|
|
520
|
-
return /\S/.test(msg2)
|
|
521
|
-
})
|
|
518
|
+
messages = messages.filter((msg2) => /\S/.test(msg2))
|
|
522
519
|
|
|
523
520
|
// Multiline AUTH PLAIN as in RFC-4954 page 8.
|
|
524
521
|
if (code === 334 && !messages.length) {
|
|
@@ -530,7 +527,7 @@ class Connection {
|
|
|
530
527
|
if (cfg.uuid.deny_chars) {
|
|
531
528
|
uuid = (this.transaction || this).uuid
|
|
532
529
|
if (cfg.uuid.deny_chars > 1) {
|
|
533
|
-
uuid = uuid.
|
|
530
|
+
uuid = uuid.slice(0, cfg.uuid.deny_chars)
|
|
534
531
|
}
|
|
535
532
|
}
|
|
536
533
|
}
|
|
@@ -673,10 +670,10 @@ class Connection {
|
|
|
673
670
|
resume() {
|
|
674
671
|
if (this.state >= states.DISCONNECTING) return
|
|
675
672
|
this.client.resume()
|
|
676
|
-
if (this.prev_state) {
|
|
673
|
+
if (this.prev_state && this.state === states.PAUSE_DATA) {
|
|
677
674
|
this.state = this.prev_state
|
|
678
|
-
this.prev_state = null
|
|
679
675
|
}
|
|
676
|
+
this.prev_state = null
|
|
680
677
|
setImmediate(() => this._process_data())
|
|
681
678
|
}
|
|
682
679
|
/////////////////////////////////////////////////////////////////////////////
|
|
@@ -793,12 +790,12 @@ class Connection {
|
|
|
793
790
|
greeting = [...cfg.message.greeting]
|
|
794
791
|
greeting[0] = `${this.local.host} ESMTP ${greeting[0]}`
|
|
795
792
|
if (cfg.uuid.banner_chars) {
|
|
796
|
-
greeting[0] += ` (${this.uuid.
|
|
793
|
+
greeting[0] += ` (${this.uuid.slice(0, cfg.uuid.banner_chars)})`
|
|
797
794
|
}
|
|
798
795
|
} else {
|
|
799
796
|
greeting = `${this.local.host} ESMTP ${this.local.info} ready`
|
|
800
797
|
if (cfg.uuid.banner_chars) {
|
|
801
|
-
greeting += ` (${this.uuid.
|
|
798
|
+
greeting += ` (${this.uuid.slice(0, cfg.uuid.banner_chars)})`
|
|
802
799
|
}
|
|
803
800
|
}
|
|
804
801
|
this.respond(220, msg || greeting)
|
|
@@ -964,7 +961,7 @@ class Connection {
|
|
|
964
961
|
let addr = sender.format()
|
|
965
962
|
if (addr.length > 2) {
|
|
966
963
|
// all but null sender
|
|
967
|
-
addr = addr.
|
|
964
|
+
addr = addr.slice(1, -1) // trim off < >
|
|
968
965
|
}
|
|
969
966
|
this.transaction.results.add(
|
|
970
967
|
{ name: 'mail_from' },
|
|
@@ -1012,7 +1009,7 @@ class Connection {
|
|
|
1012
1009
|
|
|
1013
1010
|
const addr = rcpt.format()
|
|
1014
1011
|
const recipient = {
|
|
1015
|
-
address: addr.
|
|
1012
|
+
address: addr.slice(1, -1),
|
|
1016
1013
|
action,
|
|
1017
1014
|
}
|
|
1018
1015
|
|
|
@@ -1446,10 +1443,9 @@ class Connection {
|
|
|
1446
1443
|
}
|
|
1447
1444
|
|
|
1448
1445
|
// assemble the new header
|
|
1449
|
-
let header = [this.local.host]
|
|
1450
|
-
header = header.concat(this.notes.authentication_results)
|
|
1446
|
+
let header = [this.local.host, ...this.notes.authentication_results]
|
|
1451
1447
|
if (has_tran === true) {
|
|
1452
|
-
header = header
|
|
1448
|
+
header = [...header, ...this.transaction.notes.authentication_results]
|
|
1453
1449
|
}
|
|
1454
1450
|
if (header.length === 1) return '' // no results
|
|
1455
1451
|
return header.join(';\r\n\t')
|
package/docs/Plugins.md
CHANGED
|
@@ -166,7 +166,7 @@ These are the hook and their parameters (next excluded):
|
|
|
166
166
|
- rcpt_ok (to)
|
|
167
167
|
- data - called at the DATA command
|
|
168
168
|
- data_post - called at the end-of-data marker
|
|
169
|
-
- max_data_exceeded - called when the message exceeds connection.
|
|
169
|
+
- max_data_exceeded - called when the message exceeds connection.max.bytes
|
|
170
170
|
- queue - called to queue the mail
|
|
171
171
|
- queue_outbound - called to queue the mail when connection.relaying is set
|
|
172
172
|
- queue_ok - called when a mail has been queued successfully
|
package/docs/plugins/aliases.md
CHANGED
|
@@ -97,7 +97,6 @@ WARNING: DO NOT USE THIS PLUGIN WITH queue/smtp_proxy.
|
|
|
97
97
|
- action (required)
|
|
98
98
|
|
|
99
99
|
The following is a list of supported actions, and the options they require.
|
|
100
|
-
|
|
101
100
|
- drop
|
|
102
101
|
|
|
103
102
|
This action simply drops a message, while pretending everything was
|
|
@@ -110,7 +109,6 @@ WARNING: DO NOT USE THIS PLUGIN WITH queue/smtp_proxy.
|
|
|
110
109
|
"to" option. A note about matching in addition to the note
|
|
111
110
|
about wildcard '-' above. When we match an alias, we store the
|
|
112
111
|
hostname of the match for a shortcut substitution syntax later.
|
|
113
|
-
|
|
114
112
|
- to (required)
|
|
115
113
|
|
|
116
114
|
This option is the full address, or local part at matched hostname
|