@@ -27,6 +27,8 @@ console.log("AWS Lambda SES Forwarder // @arithmetric // Version 4.2.0");
2727//
2828// To match a mailbox name on all domains, use a key without the "at" symbol
2929// and domain part of an email address (i.e. `info`).
30+ //
31+ // - emailCleanupS3: true to delete email from S3 bucket
3032var defaultConfig = {
3133 fromEmail : "noreply@example.com" ,
3234 subjectPrefix : "" ,
@@ -46,7 +48,8 @@ var defaultConfig = {
4648 "info" : [
4749 "info@example.com"
4850 ]
49- }
51+ } ,
52+ emailCleanupS3 : false
5053} ;
5154
5255/**
@@ -280,6 +283,33 @@ exports.sendMessage = function(data) {
280283 } ) ;
281284} ;
282285
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+
283313/**
284314 * Handler function to be invoked by AWS Lambda with an inbound SES email as
285315 * the event.
@@ -291,14 +321,6 @@ exports.sendMessage = function(data) {
291321 * configuration, SES object, and S3 object.
292322 */
293323exports . 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- ] ;
302324 var data = {
303325 event : event ,
304326 callback : callback ,
@@ -309,6 +331,17 @@ exports.handler = function(event, context, callback, overrides) {
309331 s3 : overrides && overrides . s3 ?
310332 overrides . s3 : new AWS . S3 ( { signatureVersion : 'v4' } )
311333 } ;
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+ }
312345 Promise . series ( steps , data )
313346 . then ( function ( data ) {
314347 data . log ( { level : "info" , message : "Process finished successfully." } ) ;
0 commit comments