@@ -27,6 +27,8 @@ console.log("AWS Lambda SES Forwarder // @arithmetric // Version 4.2.0");
27
27
//
28
28
// To match a mailbox name on all domains, use a key without the "at" symbol
29
29
// and domain part of an email address (i.e. `info`).
30
+ //
31
+ // - emailCleanupS3: true to delete email from S3 bucket
30
32
var defaultConfig = {
31
33
32
34
subjectPrefix : "" ,
@@ -46,7 +48,8 @@ var defaultConfig = {
46
48
"info" : [
47
49
48
50
]
49
- }
51
+ } ,
52
+ emailCleanupS3 : false
50
53
} ;
51
54
52
55
/**
@@ -280,6 +283,33 @@ exports.sendMessage = function(data) {
280
283
} ) ;
281
284
} ;
282
285
286
+ /**
287
+ * Clean up (delete) the S3 email object
288
+ *
289
+ * @param {object } data - Data bundle with context, email, etc.
290
+ *
291
+ * @return {object } - Promise resolved with data.
292
+ */
293
+ exports . cleanupS3Email = function ( data ) {
294
+ data . log ( { level : "info" , message : "Deleting email at s3://" +
295
+ data . config . emailBucket + '/' + data . config . emailKeyPrefix +
296
+ data . email . messageId } ) ;
297
+ return new Promise ( function ( resolve , reject ) {
298
+ data . s3 . deleteObject ( {
299
+ Bucket : data . config . emailBucket ,
300
+ Key : data . config . emailKeyPrefix + data . email . messageId
301
+ } , function ( err , result ) {
302
+ if ( err ) {
303
+ data . log ( { level : "error" , message : "deleteObject() returned error:" ,
304
+ error : err , stack : err . stack } ) ;
305
+ return reject ( new Error ( 'Error: Email cleanup on S3 failed.' ) ) ;
306
+ }
307
+ data . log ( { level : "info" , message : "cleanupS3Email() successful." , result : result } ) ;
308
+ resolve ( data ) ;
309
+ } ) ;
310
+ } ) ;
311
+ } ;
312
+
283
313
/**
284
314
* Handler function to be invoked by AWS Lambda with an inbound SES email as
285
315
* the event.
@@ -291,14 +321,6 @@ exports.sendMessage = function(data) {
291
321
* configuration, SES object, and S3 object.
292
322
*/
293
323
exports . handler = function ( event , context , callback , overrides ) {
294
- var steps = overrides && overrides . steps ? overrides . steps :
295
- [
296
- exports . parseEvent ,
297
- exports . transformRecipients ,
298
- exports . fetchMessage ,
299
- exports . processMessage ,
300
- exports . sendMessage
301
- ] ;
302
324
var data = {
303
325
event : event ,
304
326
callback : callback ,
@@ -309,6 +331,17 @@ exports.handler = function(event, context, callback, overrides) {
309
331
s3 : overrides && overrides . s3 ?
310
332
overrides . s3 : new AWS . S3 ( { signatureVersion : 'v4' } )
311
333
} ;
334
+ var steps = overrides && overrides . steps ? overrides . steps :
335
+ [
336
+ exports . parseEvent ,
337
+ exports . transformRecipients ,
338
+ exports . fetchMessage ,
339
+ exports . processMessage ,
340
+ exports . sendMessage
341
+ ] ;
342
+ if ( data . config . emailCleanupS3 ) {
343
+ steps . push ( exports . cleanupS3Email ) ;
344
+ }
312
345
Promise . series ( steps , data )
313
346
. then ( function ( data ) {
314
347
data . log ( { level : "info" , message : "Process finished successfully." } ) ;
0 commit comments