Skip to content

Commit 53348d8

Browse files
committed
Added optional email cleanup on S3 at end of process
1 parent d681830 commit 53348d8

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ the email forwarding mapping from original destinations to new destination.
8888
"Effect": "Allow",
8989
"Action": [
9090
"s3:GetObject",
91-
"s3:PutObject"
91+
"s3:PutObject",
92+
"s3:DeleteObject"
9293
],
9394
"Resource": "arn:aws:s3:::S3-BUCKET-NAME/*"
9495
}

index.js

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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
3032
var defaultConfig = {
3133
fromEmail: "[email protected]",
3234
subjectPrefix: "",
@@ -46,7 +48,8 @@ var defaultConfig = {
4648
"info": [
4749
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
*/
293323
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-
];
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

Comments
 (0)