June 10, 2016 · Lambda SES

Lambda ve Simple Email Service kullanarak ePosta ve Eklenti Gönderme

SES Sending EMail

ePosta gönderme işlemi SMTP sunucusu üzerinden javax.mail ile basit bir şekilde gerçekleştirilebilir. SMTP sunucusu üzerinden hesabınızı ve şifrenizi alıp daha sonra uzaktan bu hesabı kullanarak ePosta'larınızı gönderebilirsiniz.

javax.mail ile Gmail'den aldığınız bir hesap ile aşağıdaki bilgileri kullanarak ePosta'larınızı gönderebilirsiniz.

Konumuz Lambda ile SES servisi üzerinden ePosta göndermek olduğu için burada daha çok SES üzerinde duracağız.

SES üzerine kendi DNS ayarlarınınzı nasıl yapacagız konusunda önceden bir makale yazmıştım. Bu kısım daha çok ePosta alma tarafını anlatıyordu. Gönderme kısmı için gerçek ePosta hesaplarına gönderebilmesi için AWS Support Center'da bir SES Increase Limit Case oluşturmanız gerekiyor.

SES Limit Increase

Şimdi Lambda fonksiyonunuzu oluşturabilirsiniz. S3, DynamoDB nin herhangi bir event'ine bağlayabildiğiniz gibi. Bir APIGateway isteğinin arkasına aşağıdaki kodu Lambda fonksiyonunuzun içerisine koyarak ePosta gönderimini gerçekleştirebilirsiniz.

//Node.js SES ile ePosta gönderme Yöntemi 
function sendEmail (event, done) {
var params = {
    Destination: {
        ToAddresses: [
            RECEIVER
        ]
    },
    Message: {
        Body: {
            Text: {
                Data: code,
                Charset: 'UTF-8'
            }
        },
        Subject: {
            Data: obj.Subject,
            Charset: 'UTF-8'
        }
    },
    Source: SENDER
} 
console.log('Ses Sending Now...'+SENDER+' to '+RECEIVER+' code '+code+ ' subject '+obj.subject);
ses.sendEmail(params, done)

Bazen'da ePosta'yı RAW olarak atma ihtiyacı duyabilirsiniz. Ben Google Inbox'ın Schema.org standardını göstermemesi sebebiyle. Başarısız ePosta formatını, başarılı ePosta formatına benzetebilmek için bu yöntemi kullandım. Burada Mail içeriğini tümüyle sizin oluşturmanız gerekiyor.

var myVariable = "<html>\schema<\/html>";
var ses_mail = "Subject: Google Schema Test\n";
ses_mail = ses_mail +  "From: " + emailA + "\n";
ses_mail = ses_mail + "To: " + email + "\n";
ses_mail = ses_mail + "MIME-Version: 1.0\n";
ses_mail = ses_mail + "Content-Type: multipart/alternative; boundary=001a1136bf583ca6ae0534ce1d7a\n\n";
ses_mail = ses_mail + "--001a1136bf583ca6ae0534ce1d7a\n";
ses_mail = ses_mail + "Content-Type: text/plain; charset=UTF-8; format=flowed; delsp=yes\n\n";
ses_mail = ses_mail + "This a test for a Go-To action in Gmail.\n\n";
ses_mail = ses_mail + "--001a1136bf583ca6ae0534ce1d7a\n";
ses_mail = ses_mail + "Content-Type: text/html; charset=UTF-8\n";
ses_mail = ses_mail + myVariable + "\n\n";
ses_mail = ses_mail + "--001a1136bf583ca6ae0534ce1d7a--";

var params = {
    RawMessage: { Data: new Buffer(ses_mail) },
    Destinations: [ email ],
    Source: emailA
};

ses.sendRawEmail(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket
Comments powered by Disqus