2015-09-16 13 views
27

Stworzyłem bardzo prostą, prostą funkcję na serwerze AWS Lambda, która będzie używana do przyjmowania zgłoszeń formularzy.Wysyłanie wiadomości e-mail przez AWS SES w ramach funkcji AWS Lambda

Częścią funkcji będzie wysyłanie wiadomości e-mail do konkretnej osoby, całkiem prostej. Próbuję użyć AWS SES, aby to zrobić. Skonfigurowałem usługę SES itp. I zweryfikowałem konto, na które chcę wysłać, i mogłem wysłać wiadomość testową. Wszystkie prace !!

Teraz, gdy próbuję zrobić to samo w AWS Lambda i użyć aws sdk, nie wysyła on wiadomości e-mail. Nie dostaję błędu ani nic.

Poniżej znajduje się kod, którego używam do funkcji AWS Lambda.

Czy ktoś miał jakiekolwiek doświadczenie w korzystaniu z lambda i wysyłaniu wiadomości e-mail przez ses, za pomocą funkcji lambda? Lub nawet po prostu użycie pliku node.js aws sdk może być bardziej przydatne.

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 nie jest wymagany. Zalecane podejście polega na użyciu ról IAM do zarządzania dostępem. – swogger

+0

możesz zrobić to od strony klienta? – SuperUberDuper

+0

Nie próbowałem, ale nie rozumiem, dlaczego nie? – Darren

Odpowiedz

14

Wygląda na to, że miałem context.succeed (event) umieszczony w niewłaściwym miejscu kodu.

Po przeniesieniu go do wywołania zwrotnego sendEmail wszystko działało.

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> Czy wypróbowałeś odpowiednik Javy w powyższym języku? – Jasper

+0

@Jasper niestety nie mam. Czy wystąpił ten sam problem? – Darren

+0

Wywołanie tego działa ... za pośrednictwem punktów końcowych odpoczynku z programu uruchomionego na moim komputerze ..... ale jeśli spróbuję z innej domeny (serwera) - widzę 403 (może to być spowodowane sprawą CORS o wielu domenach). – Jasper

Powiązane problemy