@@ -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
+ // - emailCleanupOnS3: 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
+ emailCleanupOnS3 : false
50
53
} ;
51
54
52
55
/**
@@ -280,6 +283,34 @@ 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 . emailCleanupOnS3 = 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 : "emailCleanupOnS3() successful." ,
308
+ result : result } ) ;
309
+ resolve ( data ) ;
310
+ } ) ;
311
+ } ) ;
312
+ } ;
313
+
283
314
/**
284
315
* Handler function to be invoked by AWS Lambda with an inbound SES email as
285
316
* the event.
@@ -291,14 +322,6 @@ exports.sendMessage = function(data) {
291
322
* configuration, SES object, and S3 object.
292
323
*/
293
324
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
325
var data = {
303
326
event : event ,
304
327
callback : callback ,
@@ -309,6 +332,17 @@ exports.handler = function(event, context, callback, overrides) {
309
332
s3 : overrides && overrides . s3 ?
310
333
overrides . s3 : new AWS . S3 ( { signatureVersion : 'v4' } )
311
334
} ;
335
+ var steps = overrides && overrides . steps ? overrides . steps :
336
+ [
337
+ exports . parseEvent ,
338
+ exports . transformRecipients ,
339
+ exports . fetchMessage ,
340
+ exports . processMessage ,
341
+ exports . sendMessage
342
+ ] ;
343
+ if ( data . config . emailCleanupOnS3 ) {
344
+ steps . push ( exports . emailCleanupOnS3 ) ;
345
+ }
312
346
Promise . series ( steps , data )
313
347
. then ( function ( data ) {
314
348
data . log ( { level : "info" , message : "Process finished successfully." } ) ;
0 commit comments