added webhook support for postal mail server
This commit is contained in:
parent
e0bee9ed42
commit
d52436c566
2 changed files with 38 additions and 3 deletions
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue