diff --git a/index.js b/index.js index 0fd4854e..1ef2340f 100644 --- a/index.js +++ b/index.js @@ -17,6 +17,7 @@ let postfixBounceServer = require('./services/postfix-bounce-server'); let tzupdate = require('./services/tzupdate'); let feedcheck = require('./services/feedcheck'); let dbcheck = require('./lib/dbcheck'); +let tools = require('./lib/tools'); let port = config.www.port; let host = config.www.host; @@ -88,9 +89,11 @@ function spawnSenders(callback) { let child = fork(__dirname + '/services/sender.js', []); let pid = child.pid; + tools.workers.add(child); child.on('close', (code, signal) => { spawned--; + tools.workers.delete(child); log.error('Child', 'Sender process %s exited with %s', pid, code || signal); // Respawn after 5 seconds setTimeout(() => spawnSender(), 5 * 1000).unref(); diff --git a/lib/tools.js b/lib/tools.js index 790336ce..41c8b782 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -19,7 +19,8 @@ module.exports = { validateEmail, formatMessage, getMessageLinks, - prepareHtml + prepareHtml, + workers: new Set() }; function toDbKey(key) { diff --git a/package.json b/package.json index 0af0dcf8..179ac571 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "compression": "^1.6.2", "config": "^1.24.0", "connect-flash": "^0.1.1", - "connect-redis": "^3.1.0", + "connect-redis": "^3.2.0", "cookie-parser": "^1.4.3", "csurf": "^1.9.0", "csv-generate": "^1.0.0", @@ -49,21 +49,21 @@ "handlebars": "^4.0.6", "hbs": "^4.0.1", "he": "^1.1.0", - "html-to-text": "^2.1.3", + "html-to-text": "^3.0.0", "humanize": "0.0.9", "is-url": "^1.2.2", "isemail": "^2.2.1", - "jsdom": "^9.8.3", + "jsdom": "^9.9.1", "juice": "^4.0.2", "libmime": "^3.0.0", "mkdirp": "^0.5.1", - "moment-timezone": "^0.5.10", + "moment-timezone": "^0.5.11", "morgan": "^1.7.0", - "multer": "^1.2.0", + "multer": "^1.2.1", "mysql": "^2.12.0", "nodemailer": "^2.7.0", "nodemailer-openpgp": "^1.0.2", - "npmlog": "^4.0.1", + "npmlog": "^4.0.2", "openpgp": "^2.3.5", "passport": "^0.3.2", "passport-local": "^1.0.0", @@ -73,8 +73,8 @@ "serve-favicon": "^2.3.2", "shortid": "^2.2.6", "slugify": "^1.0.2", - "smtp-server": "^1.16.1", + "smtp-server": "^1.17.0", "striptags": "^2.1.1", - "toml": "^2.3.0" + "toml": "^2.3.1" } } diff --git a/routes/settings.js b/routes/settings.js index 72e63546..5932701e 100644 --- a/routes/settings.js +++ b/routes/settings.js @@ -87,6 +87,11 @@ router.post('/update', passport.parseForm, passport.csrfProtection, (req, res) = let storeSettings = () => { if (i >= keys.length) { mailer.update(); + tools.workers.forEach(worker => { + worker.send({ + reload: true + }); + }); req.flash('success', 'Settings updated'); return res.redirect('/settings'); } diff --git a/services/sender.js b/services/sender.js index 105e531d..23001b5b 100644 --- a/services/sender.js +++ b/services/sender.js @@ -544,3 +544,10 @@ let sendLoop = () => { }; sendLoop(); + +process.on('message', m => { + if (m && m.reload) { + log.info('Sender/' + process.pid, 'Reloading mailer config'); + mailer.update(); + } +}); diff --git a/views/settings.hbs b/views/settings.hbs index 3b1baf37..0783b5b2 100644 --- a/views/settings.hbs +++ b/views/settings.hbs @@ -173,14 +173,14 @@
- +
- +