Skip to content

Commit 0ef9782

Browse files
committed
checks latest event from mailgun logs for delivery_status
1 parent 294c511 commit 0ef9782

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

Backend/api/emailApi.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,9 @@ definitions:
317317
type: string
318318
format: date
319319
description: The delivery time.
320+
delivery_status:
321+
type: string
322+
description: The current status of the email
320323
MailgunStatistics:
321324
properties:
322325
accepted:

Backend/config/default.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"poolIdleTimeout": 1000
1010
},
1111
"mailConfig": {
12-
"mailgunKey": "key-56d94b98fdc40e40163e45c737eb5e02",
13-
"mailgunDomain": "sandboxa9269a19eb3940959b34d85b0fb1c074.mailgun.org"
12+
"mailgunKey": "key-32111f1d4060712c7fbfce9be64b2994",
13+
"mailgunDomain": "sandbox9d4303fc816f40a087900785ad188fab.mailgun.org"
1414
}
1515
}

Backend/src/modules/mail/services/MailService.js

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ const emailSchema = Joi.object().keys({
4242
delivery_time: Joi.date().iso() // ISO 8601 date format.
4343
});
4444

45+
const status = {
46+
ACCEPTED: 'accepted',
47+
DELIVERED: 'delivered',
48+
FAILED: 'failed'
49+
};
50+
4551
/**
4652
* toAttachment convert image/attachment to mailgun attachment format
4753
* @param {object} attach Image/Attachment, refer to emailApi.yaml
@@ -204,8 +210,8 @@ function* getMailStatus(id) {
204210
// query mailgun for delivery information
205211
mailgun.events().get({
206212
// mailgun message-id saved enclosed in brackets
207-
'message-id': mgId.slice(1, mgId.length - 1),
208-
event: 'delivered' }, (err, body) => {
213+
'message-id': mgId.slice(1, mgId.length - 1)
214+
}, (err, body) => {
209215
// error response from mailgun
210216
if (err) {
211217
logger.info('response mailgun error:', err);
@@ -215,23 +221,36 @@ function* getMailStatus(id) {
215221
});
216222
return;
217223
}
224+
218225
logger.info('response mailgun success:', body);
226+
219227
// pick latest delivery information
220228
const deliverEvent = _.chain(body.items)
221229
.sortBy('timestamp')
222230
.last()
223231
.value();
224232

225-
if (deliverEvent) {
233+
if (!deliverEvent) {
234+
resolve({
235+
code: 404,
236+
message: 'mail id ' + id + ' not found from mailgun event logs. could be deleted from mailgun event logs.'
237+
});
238+
return;
239+
}
240+
241+
if (deliverEvent.event === status.DELIVERED) {
226242
resolve({
227243
delivered: true,
228244
// because mailgun returns unix timestamp in seconds for delivery_time
229245
delivery_time: new Date(deliverEvent.timestamp * 1000).toISOString()
246+
// may or may not return delivery_status on sucessful delivery
247+
// ,delivery_status: status.DELIVERED
230248
});
231249
} else {
232250
// not yet delivered
233251
resolve({
234-
delivered: false
252+
delivered: false,
253+
delivery_status: deliverEvent.event
235254
});
236255
}
237256
});
@@ -280,12 +299,6 @@ deleteMail.schema = {
280299
* @yield {object} MailgunStatistics/Error mailgun stat information refer to emailApi.yaml
281300
*/
282301
function* getMailStatistics() {
283-
const status = {
284-
ACCEPTED: 'accepted',
285-
DELIVERED: 'delivered',
286-
FAILED: 'failed'
287-
};
288-
289302
const result = yield new Promise((resolve) => {
290303
mailgun.stats().list({
291304
event: [status.ACCEPTED, status.FAILED, status.DELIVERED],

0 commit comments

Comments
 (0)