@@ -42,6 +42,12 @@ const emailSchema = Joi.object().keys({
42
42
delivery_time : Joi . date ( ) . iso ( ) // ISO 8601 date format.
43
43
} ) ;
44
44
45
+ const status = {
46
+ ACCEPTED : 'accepted' ,
47
+ DELIVERED : 'delivered' ,
48
+ FAILED : 'failed'
49
+ } ;
50
+
45
51
/**
46
52
* toAttachment convert image/attachment to mailgun attachment format
47
53
* @param {object } attach Image/Attachment, refer to emailApi.yaml
@@ -204,8 +210,8 @@ function* getMailStatus(id) {
204
210
// query mailgun for delivery information
205
211
mailgun . events ( ) . get ( {
206
212
// 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 ) => {
209
215
// error response from mailgun
210
216
if ( err ) {
211
217
logger . info ( 'response mailgun error:' , err ) ;
@@ -215,23 +221,36 @@ function* getMailStatus(id) {
215
221
} ) ;
216
222
return ;
217
223
}
224
+
218
225
logger . info ( 'response mailgun success:' , body ) ;
226
+
219
227
// pick latest delivery information
220
228
const deliverEvent = _ . chain ( body . items )
221
229
. sortBy ( 'timestamp' )
222
230
. last ( )
223
231
. value ( ) ;
224
232
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 ) {
226
242
resolve ( {
227
243
delivered : true ,
228
244
// because mailgun returns unix timestamp in seconds for delivery_time
229
245
delivery_time : new Date ( deliverEvent . timestamp * 1000 ) . toISOString ( )
246
+ // may or may not return delivery_status on sucessful delivery
247
+ // ,delivery_status: status.DELIVERED
230
248
} ) ;
231
249
} else {
232
250
// not yet delivered
233
251
resolve ( {
234
- delivered : false
252
+ delivered : false ,
253
+ delivery_status : deliverEvent . event
235
254
} ) ;
236
255
}
237
256
} ) ;
@@ -280,12 +299,6 @@ deleteMail.schema = {
280
299
* @yield {object} MailgunStatistics/Error mailgun stat information refer to emailApi.yaml
281
300
*/
282
301
function * getMailStatistics ( ) {
283
- const status = {
284
- ACCEPTED : 'accepted' ,
285
- DELIVERED : 'delivered' ,
286
- FAILED : 'failed'
287
- } ;
288
-
289
302
const result = yield new Promise ( ( resolve ) => {
290
303
mailgun . stats ( ) . list ( {
291
304
event : [ status . ACCEPTED , status . FAILED , status . DELIVERED ] ,
0 commit comments