mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
refactor: emailer.send and emailer.sendToEmail returns Boolean based on message being successfully sent
Note that of course this doesn't mean the message was _delivered_, just sent off. This will stop issues where emailer errors crash NodeBB
This commit is contained in:
@@ -230,7 +230,7 @@ Emailer.send = async (template, uid, params) => {
|
|||||||
if (process.env.NODE_ENV === 'development') {
|
if (process.env.NODE_ENV === 'development') {
|
||||||
winston.warn(`uid : ${uid} has no email, not sending "${template}" email.`);
|
winston.warn(`uid : ${uid} has no email, not sending "${template}" email.`);
|
||||||
}
|
}
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const allowedTpls = ['verify-email', 'welcome', 'registration_accepted', 'reset', 'reset_notify'];
|
const allowedTpls = ['verify-email', 'welcome', 'registration_accepted', 'reset', 'reset_notify'];
|
||||||
@@ -238,7 +238,7 @@ Emailer.send = async (template, uid, params) => {
|
|||||||
if (process.env.NODE_ENV === 'development') {
|
if (process.env.NODE_ENV === 'development') {
|
||||||
winston.warn(`uid : ${uid} (${userData.email}) has not confirmed email, not sending "${template}" email.`);
|
winston.warn(`uid : ${uid} (${userData.email}) has not confirmed email, not sending "${template}" email.`);
|
||||||
}
|
}
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
const userSettings = await User.getSettings(uid);
|
const userSettings = await User.getSettings(uid);
|
||||||
// Combined passed-in payload with default values
|
// Combined passed-in payload with default values
|
||||||
@@ -254,9 +254,10 @@ Emailer.send = async (template, uid, params) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (result.cancel) {
|
if (result.cancel) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
await Emailer.sendToEmail(template, userData.email, userSettings.userLang, params);
|
|
||||||
|
return Emailer.sendToEmail(template, userData.email, userSettings.userLang, params);
|
||||||
};
|
};
|
||||||
|
|
||||||
Emailer.sendToEmail = async (template, email, language, params) => {
|
Emailer.sendToEmail = async (template, email, language, params) => {
|
||||||
@@ -331,13 +332,17 @@ Emailer.sendToEmail = async (template, email, language, params) => {
|
|||||||
} else {
|
} else {
|
||||||
await Emailer.sendViaFallback(data);
|
await Emailer.sendViaFallback(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err.code === 'ENOENT' && usingFallback) {
|
if (err.code === 'ENOENT' && usingFallback) {
|
||||||
Emailer.fallbackNotFound = true;
|
Emailer.fallbackNotFound = true;
|
||||||
throw new Error('[[error:sendmail-not-found]]');
|
winston.error(`[emailer/sendToEmail] ${await translator.translate('[[error:sendmail-not-found]]')}`);
|
||||||
} else {
|
} else {
|
||||||
throw err;
|
winston.error(`[emailer/sendToEmail] ${err.message || err.code || 'Unknown error while sending email.'}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -352,6 +357,7 @@ Emailer.sendViaFallback = async (data) => {
|
|||||||
|
|
||||||
winston.verbose(`[emailer] Sending email to uid ${data.uid} (${data.to})`);
|
winston.verbose(`[emailer] Sending email to uid ${data.uid} (${data.to})`);
|
||||||
await Emailer.fallbackTransport.sendMail(data);
|
await Emailer.fallbackTransport.sendMail(data);
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
Emailer.renderAndTranslate = async (template, params, lang) => {
|
Emailer.renderAndTranslate = async (template, params, lang) => {
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ describe('emailer', () => {
|
|||||||
|
|
||||||
// TODO: test sendmail here at some point
|
// TODO: test sendmail here at some point
|
||||||
|
|
||||||
it('plugin hook should work', (done) => {
|
it('plugin hook should work', async () => {
|
||||||
const error = new Error();
|
const error = new Error();
|
||||||
|
|
||||||
Plugins.hooks.register('emailer-test', {
|
Plugins.hooks.register('emailer-test', {
|
||||||
@@ -59,12 +59,10 @@ describe('emailer', () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
Emailer.sendToEmail(template, email, language, params, (err) => {
|
const success = await Emailer.sendToEmail(template, email, language, params);
|
||||||
assert.equal(err, error);
|
assert.strictEqual(success, false);
|
||||||
|
|
||||||
Plugins.hooks.unregister('emailer-test', 'filter:email.send');
|
Plugins.hooks.unregister('emailer-test', 'filter:email.send');
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should build custom template on config change', (done) => {
|
it('should build custom template on config change', (done) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user