diff --git a/lib/tools.js b/lib/tools.js index 79cde0a1..6a8a98c8 100644 --- a/lib/tools.js +++ b/lib/tools.js @@ -15,7 +15,8 @@ module.exports = { createSlug, updateMenu, validateEmail, - formatMessage + formatMessage, + getMessageLinks }; function toDbKey(key) { @@ -147,17 +148,23 @@ function validateEmail(address, checkBlocked, callback) { }); } +function getMessageLinks(serviceUrl, campaign, list, subscription) { + return { + LINK_UNSUBSCRIBE: urllib.resolve(serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid + '?auto=yes&c=' + campaign.cid), + LINK_PREFERENCES: urllib.resolve(serviceUrl, '/subscription/' + list.cid + '/manage/' + subscription.cid), + LINK_BROWSER: urllib.resolve(serviceUrl, '/archive/' + campaign.cid + '/' + list.cid + '/' + subscription.cid) + }; +} + function formatMessage(serviceUrl, campaign, list, subscription, message, filter) { filter = typeof filter === 'function' ? filter : (str => str); + let links = getMessageLinks(serviceUrl, campaign, list, subscription); + let getValue = key => { - switch ((key || '').toString().toUpperCase().trim()) { - case 'LINK_UNSUBSCRIBE': - return urllib.resolve(serviceUrl, '/subscription/' + list.cid + '/unsubscribe/' + subscription.cid + '?auto=yes&c=' + campaign.cid); - case 'LINK_PREFERENCES': - return urllib.resolve(serviceUrl, '/subscription/' + list.cid + '/manage/' + subscription.cid); - case 'LINK_BROWSER': - return urllib.resolve(serviceUrl, '/archive/' + campaign.cid + '/' + list.cid + '/' + subscription.cid); + key = (key || '').toString().toUpperCase().trim(); + if (links.hasOwnProperty(key)) { + return links[key]; } if (subscription.mergeTags.hasOwnProperty(key)) { return subscription.mergeTags[key]; diff --git a/services/sender.js b/services/sender.js index 02f8cd08..314998b7 100644 --- a/services/sender.js +++ b/services/sender.js @@ -228,9 +228,13 @@ function formatMessage(message, callback) { }; if (!campaign.template && campaign.templateUrl) { + let form = tools.getMessageLinks(configItems.serviceUrl, campaign, list, message.subscription); + Object.keys(message.subscription.mergeTags).forEach(key => { + form[key] = message.subscription.mergeTags[key]; + }); request.post({ url: campaign.templateUrl, - form: message.subscription.mergeTags + form }, (err, httpResponse, body) => { if (err) { return callback(err);