@@ -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+ // - emailCleanupOnS3: 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+ emailCleanupOnS3 : false
5053} ;
5154
5255/**
@@ -280,6 +283,34 @@ 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 . 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+
283314/**
284315 * Handler function to be invoked by AWS Lambda with an inbound SES email as
285316 * the event.
@@ -291,14 +322,6 @@ exports.sendMessage = function(data) {
291322 * configuration, SES object, and S3 object.
292323 */
293324exports . 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- ] ;
302325 var data = {
303326 event : event ,
304327 callback : callback ,
@@ -309,6 +332,17 @@ exports.handler = function(event, context, callback, overrides) {
309332 s3 : overrides && overrides . s3 ?
310333 overrides . s3 : new AWS . S3 ( { signatureVersion : 'v4' } )
311334 } ;
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+ }
312346 Promise . series ( steps , data )
313347 . then ( function ( data ) {
314348 data . log ( { level : "info" , message : "Process finished successfully." } ) ;
0 commit comments