2015-09-16 18 views
27

Ho creato una semplice funzione molto di base su AWS Lambda che sarà utilizzato per accettare l'invio di moduli.L'invio di e-mail tramite AWS SES entro funzione AWS Lambda

Parte della funzione sarà inviare un'e-mail a una persona in particolare, piuttosto semplice. Sto cercando di usare AWS SES per fare questo. Ho impostato il servizio SES, ho verificato l'account che desidero inviare e ho potuto inviare una email di prova. Tutto funziona !!

Ora in cui provo e fare lo stesso entro AWS Lambda e utilizzare i aws SDK che non invia l'e-mail. Non ricevo un errore o qualcosa.

Di seguito è il codice che sto usando per la funzione di AWS Lambda.

Qualcuno ha avuto esperienza con lambda e l'invio di email tramite SES, attraverso una funzione lambda? O anche solo usare il nodo. Js aws sdk sarebbe più che utile.

var aws = require('aws-sdk'); 
var ses = new aws.SES({ 
    accessKeyId: 'myAccessKey', 
    secretAccesskey: 'mySecretKey', 
    region: 'eu-west-1' 
}); 

exports.handler = function(event, context) { 
    console.log("Incoming: ", event); 
    var output = querystring.parse(event); 

    var eParams = { 
     Destination: { 
      ToAddresses: ["[email protected]"] 
     }, 
     Message: { 
      Body: { 
       Text: { 
        Data: output.Key1 
       } 
      }, 
      Subject: { 
       Data: "Ses Test Email" 
      } 
     }, 
     Source: "[email protected]" 
    }; 

    console.log('===SENDING EMAIL==='); 
    var email = ses.sendEmail(eParams, function(err, data){ 
     if(err) console.log(err); 
     else { 
      console.log("===EMAIL SENT==="); 
      console.log(data); 
     } 
    }); 
    console.log("EMAIL CODE END"); 
    console.log('EMAIL: ', email); 
    context.succeed(event); 
}; 
+2

AccessKey non è richiesto. L'approccio consigliato è utilizzare i ruoli IAM per gestire l'accesso. – swogger

+0

puoi farlo dal clientide? – SuperUberDuper

+0

Non ho provato ma non vedo perché no? – Darren

risposta

14

Sembrerebbe che l'evento context. (Evento) sia stato inserito nell'area errata del codice.

Una volta spostato nel callback sendEmail tutto funzionava.

var aws = require('aws-sdk'); 
var ses = new aws.SES({ 
    accessKeyId: 'myAccessKey', 
    secretAccesskey: 'mySecretKey', 
    region: 'eu-west-1' 
}); 

exports.handler = function(event, context) { 
    console.log("Incoming: ", event); 
    var output = querystring.parse(event); 

    var eParams = { 
    Destination: { 
     ToAddresses: ["[email protected]"] 
    }, 
    Message: { 
     Body: { 
      Text: { 
       Data: output.Key1 
      } 
     }, 
     Subject: { 
      Data: "Ses Test Email" 
     } 
    }, 
    Source: "[email protected]" 
}; 

console.log('===SENDING EMAIL==='); 
var email = ses.sendEmail(eParams, function(err, data){ 
    if(err) { 
     console.log(err); 
     context.fail(err); 
    }; 
    else { 
     console.log("===EMAIL SENT==="); 
     console.log("EMAIL CODE END"); 
     console.log('EMAIL: ', email); 
     console.log(data); 
     context.succeed(event); 
    } 
});}; 
+0

Darren> Hai provato l'equivalente Java di quanto sopra? – Jasper

+0

@ Jasper purtroppo non l'ho fatto. Hai riscontrato lo stesso problema? – Darren

+0

Invocare questo funziona ... tramite endpoint di riposo da un programma in esecuzione sul mio computer ..... ma se provo da qualche altro dominio (server) - vedo 403 (potrebbe essere dovuto a cose CORS su più domini). – Jasper

Problemi correlati