Work in progress on refactoring all mail sending to use the message sender an sender workers.
Some fixes related to subscriptions and password reset.
This commit is contained in:
parent
4e9f6bd57b
commit
450b930cc5
8 changed files with 95 additions and 76 deletions
|
@ -22,6 +22,7 @@ const {getPublicUrl} = require('./urls');
|
|||
const blacklist = require('../models/blacklist');
|
||||
const libmime = require('libmime');
|
||||
const { enforce } = require('./helpers');
|
||||
const senders = require('./senders');
|
||||
|
||||
const MessageType = {
|
||||
REGULAR: 0,
|
||||
|
@ -95,9 +96,6 @@ class MessageSender {
|
|||
this.listsByCid.set(list.cid, list);
|
||||
this.listsFieldsGrouped.set(list.id, await fields.listGroupedTx(tx, list.id));
|
||||
}
|
||||
|
||||
} else {
|
||||
enforce(false);
|
||||
}
|
||||
|
||||
if (settings.attachments) {
|
||||
|
@ -119,7 +117,7 @@ class MessageSender {
|
|||
}
|
||||
|
||||
if (settings.renderedHtml !== undefined) {
|
||||
this.rendereHtml = settings.rendereHtml;
|
||||
this.renderedHtml = settings.renderedHtml;
|
||||
this.renderedText = settings.renderedText;
|
||||
|
||||
} else if (settings.html !== undefined) {
|
||||
|
@ -146,6 +144,7 @@ class MessageSender {
|
|||
let renderTags = false;
|
||||
const campaign = this.campaign;
|
||||
|
||||
|
||||
if (this.renderedHtml !== undefined) {
|
||||
html = this.renderedHtml;
|
||||
text = this.renderedText;
|
||||
|
@ -497,6 +496,12 @@ class MessageSender {
|
|||
}
|
||||
}
|
||||
|
||||
async function dropQueuedMessage(queuedMessage) {
|
||||
await knex('queued')
|
||||
.where({id: queuedMessage.id})
|
||||
.del();
|
||||
}
|
||||
|
||||
async function sendQueuedMessage(queuedMessage) {
|
||||
const msgData = queuedMessage.data;
|
||||
|
||||
|
@ -574,11 +579,13 @@ async function queueSubscriptionMessage(sendConfigurationId, to, subject, encryp
|
|||
encryptionKeys
|
||||
};
|
||||
|
||||
await tx('queued').insert({
|
||||
await knex('queued').insert({
|
||||
send_configuration: sendConfigurationId,
|
||||
type: MessageType.SUBSCRIPTION,
|
||||
data: JSON.stringify(msgData)
|
||||
});
|
||||
|
||||
senders.scheduleCheck();
|
||||
}
|
||||
|
||||
module.exports.MessageSender = MessageSender;
|
||||
|
@ -586,3 +593,4 @@ module.exports.MessageType = MessageType;
|
|||
module.exports.sendQueuedMessage = sendQueuedMessage;
|
||||
module.exports.queueCampaignMessageTx = queueCampaignMessageTx;
|
||||
module.exports.queueSubscriptionMessage = queueSubscriptionMessage;
|
||||
module.exports.dropQueuedMessage = dropQueuedMessage;
|
|
@ -9,6 +9,7 @@ const contextHelpers = require('./context-helpers');
|
|||
const {getFieldColumn} = require('../../shared/lists');
|
||||
const forms = require('../models/forms');
|
||||
const messageSender = require('./message-sender');
|
||||
const tools = require('./tools');
|
||||
|
||||
module.exports = {
|
||||
sendAlreadySubscribed,
|
||||
|
@ -64,37 +65,12 @@ async function sendUnsubscriptionConfirmed(locale, list, email, subscription) {
|
|||
await _sendMail(list, email, 'unsubscription_confirmed', locale, tMark('listUnsubscriptionConfirmed'), relativeUrls, subscription);
|
||||
}
|
||||
|
||||
function getDisplayName(flds, subscription) {
|
||||
let firstName, lastName, name;
|
||||
|
||||
for (const fld of flds) {
|
||||
if (fld.key === 'FIRST_NAME') {
|
||||
firstName = subscription[fld.column];
|
||||
}
|
||||
|
||||
if (fld.key === 'LAST_NAME') {
|
||||
lastName = subscription[fld.column];
|
||||
}
|
||||
|
||||
if (fld.key === 'NAME') {
|
||||
name = subscription[fld.column];
|
||||
}
|
||||
}
|
||||
|
||||
if (name) {
|
||||
return name;
|
||||
} else if (firstName && lastName) {
|
||||
return firstName + ' ' + lastName;
|
||||
} else if (lastName) {
|
||||
return lastName;
|
||||
} else if (firstName) {
|
||||
return firstName;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
async function _sendMail(list, email, template, locale, subjectKey, relativeUrls, subscription) {
|
||||
subscription = {
|
||||
...subscription,
|
||||
email
|
||||
};
|
||||
|
||||
const flds = await fields.list(contextHelpers.getAdminContext(), list.id);
|
||||
|
||||
const encryptionKeys = [];
|
||||
|
@ -136,11 +112,13 @@ async function _sendMail(list, email, template, locale, subjectKey, relativeUrls
|
|||
}
|
||||
|
||||
try {
|
||||
const mergeTags = fields.getMergeTags(flds, subscription);
|
||||
|
||||
if (list.send_configuration) {
|
||||
await messageSender.queueSubscriptionMessage(
|
||||
list.send_configuration,
|
||||
{
|
||||
name: getDisplayName(flds, subscription),
|
||||
name: list.to_name === null ? undefined : tools.formatTemplate(list.to_name, {}, mergeTags, false),
|
||||
address: email
|
||||
},
|
||||
tUI(subjectKey, locale, { list: list.name }),
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
const util = require('util');
|
||||
const isemail = require('isemail');
|
||||
const path = require('path');
|
||||
const {getPublicUrl} = require('./urls');
|
||||
|
||||
const bluebird = require('bluebird');
|
||||
|
||||
const {enforce} = require('./helpers');
|
||||
const hasher = require('node-object-hash')();
|
||||
|
||||
const mjml2html = require('mjml');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue