Builting ZoneMTA with the plugins

This commit is contained in:
Tomas Bures 2018-12-16 22:44:50 +01:00
parent 77c64f487d
commit 1ebf808724
7 changed files with 1635 additions and 1 deletions

@ -1 +0,0 @@
Subproject commit 7990c49dda71c8cb65ddd83da3b785711d26894b

View file

@ -0,0 +1,97 @@
module.exports = {
// This is the main config file
name: 'ZoneMTA',
// Process identifier
ident: 'zone-mta',
// Run as the following user. Only use this if the application starts up as root
// user: "zonemta"
// group: "zonemta"
log: {
level: 'info'
},
dbs: {
// MongoDB connection string
mongo: 'mongodb://127.0.0.1:27017/zone-mta',
// Redis connection string
redis: 'redis://localhost:6379/2',
// Database name for ZoneMTA data in MongoDB. In most cases it should be the same as in the connection string
sender: 'zone-mta'
},
api: {
maildrop: false,
user: 'mailtrain',
pass: 'mailtrain'
},
smtpInterfaces: {
// Default SMTP interface for accepting mail for delivery
feeder: {
enabled: true,
// How many worker processes to spawn
processes: 1,
// Maximum allowed message size 30MB
maxSize: 31457280,
// Local IP and port to bind to
host: '127.0.0.1',
port: 2525,
// Set to true to require authentication
// If authentication is enabled then you need to use a plugin with an authentication hook
authentication: true,
// How many recipients to allow per message
maxRecipients: 1,
// Set to true to enable STARTTLS. Do not forget to change default TLS keys
starttls: false,
// set to true to start in TLS mode if using port 465
// this probably does not work as TLS support with 465 in ZoneMTA is a bit buggy
secure: false,
}
},
plugins: {
"core/email-bounce": false,
"core/http-bounce": {
enabled: "main",
url: "http://localhost:3000/webhooks/zone-mta"
},
"core/default-headers": {
enabled: ["receiver", "main", "sender"],
futureDate: false,
xOriginatingIP: false
},
'mailtrain-main': {
enabled: ['main']
},
'mailtrain-receiver': {
enabled: ['receiver'],
username: 'mailtrain',
password: 'mailtrain'
}
},
zones: {
default: {
preferIPv6: false,
ignoreIPv6: true,
processes: 1,
connections: 5,
pool: 'default'
}
}
};

4
zone-mta/index.js Normal file
View file

@ -0,0 +1,4 @@
'use strict';
// start the app
require('zone-mta');

1456
zone-mta/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

22
zone-mta/package.json Normal file
View file

@ -0,0 +1,22 @@
{
"name": "mailtrain-zone-mta",
"private": true,
"version": "1.0.0",
"description": "Mailtrain builtin ZoneMTA instance",
"main": "index.js",
"scripts": {
"start": "node index.js --config=config/zonemta.js"
},
"keywords": [],
"license": "GPL-3.0",
"homepage": "https://mailtrain.org/",
"engines": {
"node": ">=10.0.0"
},
"dependencies": {
"zone-mta": "1.13.3",
"zonemta-delivery-counters": "1.0.1",
"zonemta-limiter": "1.0.0",
"zonemta-loop-breaker": "1.0.2"
}
}

View file

@ -0,0 +1,14 @@
'use strict';
// Set module title
module.exports.title = 'Mailtrain integration (main)';
// Initialize the module
module.exports.init = (app, done) => {
process.send({
type: 'zone-mta-started'
});
done();
};

View file

@ -0,0 +1,42 @@
'use strict';
// Set module title
module.exports.title = 'Mailtrain integration (receiver)';
// Initialize the module
module.exports.init = (app, done) => {
app.addHook('message:headers', (envelope, messageInfo, next) => {
const headers = envelope.headers;
if (!envelope.dkim.keys) {
envelope.dkim.keys = [];
}
const dkimHeaderValue = headers.getFirst('x-mailtrain-dkim');
if (dkimHeaderValue) {
const dkimKey = JSON.parse(dkimHeaderValue);
envelope.dkim.keys.push(dkimKey);
headers.remove('x-mailtrain-dkim');
}
return next();
});
app.addHook('smtp:auth', (auth, session, next) => {
if (auth.username === app.config.username && auth.password === app.config.password) {
next();
} else {
// do not provide any details about the failure
const err = new Error('Authentication failed');
err.responseCode = 535;
return next(err);
}
});
// all set up regarding this plugin
done();
};