Pertanyaan Mengirim email melalui AWS SES dalam fungsi AWS Lambda


Saya telah membuat fungsi sederhana yang sangat mendasar pada AWS Lambda yang akan digunakan untuk menerima pengiriman formulir.

Bagian dari fungsinya adalah mengirim email ke orang tertentu, cukup sederhana. Saya mencoba menggunakan AWS SES untuk melakukan ini. Saya telah menyiapkan layanan SES, dan memverifikasi akun yang ingin saya kirim dan telah dapat mengirim email uji. Semua bekerja !!

Sekarang ketika saya mencoba dan melakukan hal yang sama dalam AWS Lambda dan menggunakan aws sdk itu tidak mengirim email. Saya tidak mendapatkan kesalahan atau apa pun.

Di bawah ini adalah kode yang saya gunakan untuk fungsi AWS Lambda.

Adakah yang punya pengalaman menggunakan lambda dan mengirim email melalui ses, melalui fungsi lambda? Atau bahkan hanya menggunakan node.js aws sdk akan lebih bermanfaat.

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: ["toAddress@email.com"]
        },
        Message: {
            Body: {
                Text: {
                    Data: output.Key1
                }
            },
            Subject: {
                Data: "Ses Test Email"
            }
        },
        Source: "mysource@source.com"
    };

    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);
};

32
2017-09-16 12:23


asal


Jawaban:


Tampaknya saya memiliki konteks. Berhasil (peristiwa) ditempatkan di area kode yang salah.

Setelah saya pindah ke callback sendEmail semua bekerja.

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: ["toAddress@email.com"]
    },
    Message: {
        Body: {
            Text: {
                Data: output.Key1
            }
        },
        Subject: {
            Data: "Ses Test Email"
        }
    },
    Source: "mysource@source.com"
};

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);
    }
});};

18
2017-09-16 13:35



Ini karena Lambda membekukan penampung saat fungsi keluar dan proses async apa pun dibekukan, seperti email Anda. Ini terutama benar dengan Node. Lihat Model Pemrograman Lambda. http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html


0
2017-07-25 01:47