added webhook support for postal mail server

This commit is contained in:
Gernot Pansy 2019-02-14 22:38:35 +01:00
parent e0bee9ed42
commit d52436c566
2 changed files with 38 additions and 3 deletions

View file

@ -391,10 +391,12 @@ class CampaignSender {
let status;
let response;
let responseId;
try {
const info = await mailer.sendMassMail(mail);
status = SubscriptionStatus.SUBSCRIBED;
response = info.response || info.messageId;
responseId = info.messageId.replace(/(^<|>$)/g, "") || response.split(/\s+/).pop();
await knex('campaigns').where('id', campaign.id).increment('delivered');
} catch (err) {
@ -403,8 +405,6 @@ class CampaignSender {
await knex('campaigns').where('id', campaign.id).increment('delivered').increment('bounced');
}
const responseId = response.split(/\s+/).pop();
const now = new Date();
if (campaign.type === CampaignType.REGULAR || campaign.type === CampaignType.RSS_ENTRY) {

View file

@ -254,4 +254,39 @@ router.postAsync('/zone-mta/sender-config/:sendConfigurationCid', async (req, re
});
});
router.postAsync('/postal', async (req, res) => {
if (typeof req.body === 'string') {
req.body = JSON.parse(req.body);
}
switch (req.body.event) {
case 'MessageDeliveryFailed':
if (req.body.payload.message && req.body.payload.message.message_id) {
const message = await campaigns.getMessageByResponseId(req.body.payload.message.message_id);
if (message) {
await campaigns.changeStatusByMessage(contextHelpers.getAdminContext(), message, SubscriptionStatus.BOUNCED, req.body.payload.status === 'HardFail');
log.verbose('Postal', 'Marked message %s as bounced', req.body.payload.message.message_id);
}
}
break;
case 'MessageBounced':
if (req.body.payload.original_message && req.body.payload.original_message.message_id) {
const message = await campaigns.getMessageByResponseId(req.body.payload.original_message.message_id);
if (message) {
await campaigns.changeStatusByMessage(contextHelpers.getAdminContext(), message, SubscriptionStatus.BOUNCED, true);
log.verbose('Postal', 'Marked message %s as bounced', req.body.payload.original_message.message_id);
}
}
break;
}
res.json({
success: true
});
});
module.exports = router;