I’m working with Mailgun webhooks in my Meteor app and running into an issue. When I try to process bounce notifications, the request body comes back empty. Other webhook events seem to work fine, but specifically for bounced emails I can’t access any data from this.request.body. Has anyone dealt with this before?
Router.route('/webhooks/mailgun/events', { where: 'server' })
.post(function() {
Router.onBeforeAction(Iron.Router.bodyParser.urlencoded({
extended: true
}));
this.response.setHeader('Access-Control-Allow-Origin', '*');
var request = this.request;
var response = this.response;
var payload = request.body;
response.end('Webhook processed');
var emailData = {
eventType: '',
emailAddress: '',
messageId: '',
eventTime: '',
mailDomain: '',
location: '',
ipAddr: '',
browser: '',
platform: '',
browserType: '',
nation: '',
deviceCategory: '',
userAgent: '',
clickedUrl: ''
};
if (payload.event === 'delivered') {
emailData.mailDomain = payload['domain'];
emailData.eventType = payload['event'];
var tagData = payload['X-Mailgun-Tag'];
var trackingId = tagData.split(":")[1];
emailData.messageId = payload['Message-Id'];
emailData.emailAddress = payload['recipient'];
emailData.eventTime = payload['timestamp'];
}
if (payload.event === 'opened' || payload.event === 'clicked') {
emailData.mailDomain = payload['domain'];
emailData.eventType = payload['event'];
var tagInfo = payload['tag'];
var campaignRef = tagInfo.split(":")[1];
emailData.messageId = payload['message-id'];
emailData.emailAddress = payload['recipient'];
emailData.eventTime = payload['timestamp'];
emailData.location = payload['city'];
emailData.ipAddr = payload['ip'];
emailData.browser = payload['client-name'];
emailData.platform = payload['client-os'];
emailData.browserType = payload['client-type'];
emailData.nation = payload['country'];
emailData.deviceCategory = payload['device-type'];
emailData.userAgent = payload['user-agent'];
}
if (payload.event === 'clicked') {
emailData.clickedUrl = payload['url'];
}
if (payload.event === 'bounced' || payload.event === 'dropped') {
emailData.mailDomain = payload['domain'];
emailData.eventType = payload['event'];
var tagValue = payload['tag'];
var refId = tagValue ? tagValue.split(":")[1] : '';
emailData.messageId = payload['message-id'];
emailData.emailAddress = payload['recipient'];
emailData.eventTime = payload['timestamp'];
}
console.log('Processed webhook data:', emailData);
});