From 1b04b48ffd1cbacefe647947f203e14fb7e93519 Mon Sep 17 00:00:00 2001 From: Naz Gargol Date: Fri, 11 Oct 2019 06:21:53 +0200 Subject: [PATCH] Added `from` parameter for member emails (#11222) * Added from parameter for member emails no issue - Passed in the `from` parameter when initializing members mailer to be able to customize outgoing address - Extends GhsotMailer to accept a from parameter from the outside --- core/server/services/mail/GhostMailer.js | 2 +- core/server/services/members/api.js | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/core/server/services/mail/GhostMailer.js b/core/server/services/mail/GhostMailer.js index df013a0aaf..38787bfa3e 100644 --- a/core/server/services/mail/GhostMailer.js +++ b/core/server/services/mail/GhostMailer.js @@ -37,7 +37,7 @@ function getFromAddress(requestedFromAddress) { function createMessage(message) { return Object.assign({}, message, { - from: getFromAddress(), + from: getFromAddress(message.from), generateTextFromHTML: true, encoding: 'base64' }); diff --git a/core/server/services/members/api.js b/core/server/services/members/api.js index cc3329b847..c7528e99c9 100644 --- a/core/server/services/members/api.js +++ b/core/server/services/members/api.js @@ -158,6 +158,13 @@ function getRequirePaymentSetting() { return !!subscriptionSettings.requirePaymentForSignup; } +// NOTE: the function is an exact duplicate of one in GhostMailer should be extracted +// into a common lib once it needs to be reused anywhere else again +function getDomain() { + const domain = urlUtils.urlFor('home', true).match(new RegExp('^https?://([^/:?#]+)(?:[/:?#]|$)', 'i')); + return domain && domain[1]; +} + module.exports = createApiInstance; function createApiInstance() { @@ -182,7 +189,16 @@ function createApiInstance() { if (process.env.NODE_ENV !== 'production') { common.logging.warn(message.text); } - return ghostMailer.send(Object.assign({subject: 'Signin'}, message)); + + let msg = Object.assign({subject: 'Signin'}, message); + const subscriptionSettings = settingsCache.get('members_subscription_settings'); + + if (subscriptionSettings && subscriptionSettings.fromAddress) { + let from = `${subscriptionSettings.fromAddress}@${getDomain()}`; + msg = Object.assign({from: from}, msg); + } + + return ghostMailer.send(msg); } }, getText(url, type) {