11"use strict" ;
22
3- var AWS = require ( 'aws-sdk' ) ;
3+ const { S3Client, CopyObjectCommand, GetObjectCommand } = require ( "@aws-sdk/client-s3" ) ;
4+ const { SESv2Client, SendEmailCommand } = require ( "@aws-sdk/client-sesv2" ) ;
45
56console . log ( "AWS Lambda SES Forwarder // @arithmetric // Version 5.1.0" ) ;
67
@@ -160,19 +161,19 @@ exports.fetchMessage = function(data) {
160161 data . config . emailKeyPrefix + data . email . messageId
161162 } ) ;
162163 return new Promise ( function ( resolve , reject ) {
163- data . s3 . copyObject ( {
164+ data . s3 . send ( new CopyObjectCommand ( {
164165 Bucket : data . config . emailBucket ,
165166 CopySource : data . config . emailBucket + '/' + data . config . emailKeyPrefix +
166167 data . email . messageId ,
167168 Key : data . config . emailKeyPrefix + data . email . messageId ,
168169 ACL : 'private' ,
169170 ContentType : 'text/plain' ,
170171 StorageClass : 'STANDARD'
171- } , function ( err ) {
172+ } ) , function ( err ) {
172173 if ( err ) {
173174 data . log ( {
174175 level : "error" ,
175- message : "copyObject () returned error:" ,
176+ message : "CopyObjectCommand () returned error:" ,
176177 error : err ,
177178 stack : err . stack
178179 } ) ;
@@ -181,21 +182,21 @@ exports.fetchMessage = function(data) {
181182 }
182183
183184 // Load the raw email from S3
184- data . s3 . getObject ( {
185+ data . s3 . send ( new GetObjectCommand ( {
185186 Bucket : data . config . emailBucket ,
186187 Key : data . config . emailKeyPrefix + data . email . messageId
187- } , function ( err , result ) {
188+ } ) , async function ( err , result ) {
188189 if ( err ) {
189190 data . log ( {
190191 level : "error" ,
191- message : "getObject () returned error:" ,
192+ message : "GetObjectCommand () returned error:" ,
192193 error : err ,
193194 stack : err . stack
194195 } ) ;
195196 return reject (
196197 new Error ( "Error: Failed to load message body from S3." ) ) ;
197198 }
198- data . emailData = result . Body . toString ( ) ;
199+ data . emailData = await result . Body . transformToString ( ) ;
199200 return resolve ( data ) ;
200201 } ) ;
201202 } ) ;
@@ -285,19 +286,16 @@ exports.processMessage = function(data) {
285286} ;
286287
287288/**
288- * Send email using the SES sendRawEmail command.
289+ * Send email using the SESv2 SendEmailCommand command.
289290 *
290291 * @param {object } data - Data bundle with context, email, etc.
291292 *
292293 * @return {object } - Promise resolved with data.
293294 */
294295exports . sendMessage = function ( data ) {
295296 var params = {
296- Destinations : data . recipients ,
297- Source : data . originalRecipient ,
298- RawMessage : {
299- Data : data . emailData
300- }
297+ Destination : { ToAddresses : data . recipients } ,
298+ Content : { Raw : { Data : Buffer . from ( data . emailData ) } } ,
301299 } ;
302300 data . log ( {
303301 level : "info" ,
@@ -306,19 +304,19 @@ exports.sendMessage = function(data) {
306304 data . recipients . join ( ", " ) + "."
307305 } ) ;
308306 return new Promise ( function ( resolve , reject ) {
309- data . ses . sendRawEmail ( params , function ( err , result ) {
307+ data . ses . send ( new SendEmailCommand ( params ) , function ( err , result ) {
310308 if ( err ) {
311309 data . log ( {
312310 level : "error" ,
313- message : "sendRawEmail () returned error." ,
311+ message : "SendEmailCommand () returned error." ,
314312 error : err ,
315313 stack : err . stack
316314 } ) ;
317315 return reject ( new Error ( 'Error: Email sending failed.' ) ) ;
318316 }
319317 data . log ( {
320318 level : "info" ,
321- message : "sendRawEmail () successful." ,
319+ message : "SendEmailCommand () successful." ,
322320 result : result
323321 } ) ;
324322 resolve ( data ) ;
@@ -351,9 +349,9 @@ exports.handler = function(event, context, callback, overrides) {
351349 context : context ,
352350 config : overrides && overrides . config ? overrides . config : defaultConfig ,
353351 log : overrides && overrides . log ? overrides . log : console . log ,
354- ses : overrides && overrides . ses ? overrides . ses : new AWS . SES ( ) ,
352+ ses : overrides && overrides . ses ? overrides . ses : new SESv2Client ( ) ,
355353 s3 : overrides && overrides . s3 ?
356- overrides . s3 : new AWS . S3 ( { signatureVersion : 'v4' } )
354+ overrides . s3 : new S3Client ( { signatureVersion : 'v4' } )
357355 } ;
358356 Promise . series ( steps , data )
359357 . then ( function ( data ) {
0 commit comments