Node.js E-posta Gönderme

Yazıda Node.js ile e-posta gönderme veya daha bilinen adıyla mail gönderme ile ilgili bilgiler yer almaktadır.

Node.js ile e-posta gönderme işlemi nodemailer modülü ile yapılabilir.

Modül SMTP sunucusuna bağlanarak eposta gönderir.

Ayrıca modül içerisinde gmail, hotmail, outlook gibi hazır eposta sağlayıcı ayarları yer almaktadır.

Modülü indirmek için

npm install nodemailer

komutu veya

npm install nodemailer --save

komutu kullanılır.

Modül projeye aşağıdaki komutlarla dahil edilir.

const nodemailer = require('nodemailer');

Nodemailer dahil edildikten sonra eposta gönderme, eposta doğrulama gibi işlemleri yapmak için öncelikle SMTP bilgilerinin createTransport metoduna parametre olarak aktarılması gerekir.

let transporter = nodemailer.createTransport({
  host: 'SMTP sunucu adresi',
  port: 465,
  secure: true,
  auth: {
    user: 'eposta-adresi@eposta.uzanti',
    pass: 'eposta-şifresi'
  }
});

Yazılan parametrelerden port ve secure değerlerinin eklenmesi zorunlu değildir.

Ancak SMTP sunucunun port adresi farklı ise yazılması gerekir.

Hazır eposta sağlayıcıları (gmail, hotmail, outlook vb.) için aşağıdaki gibi bir yapı kullanılır.

let transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: 'eposta-adresi@gmail.com',
    pass: 'eposta-şifresi'
  }
});

Ayarlar createTransport metoduna aktarıldıktan sonra metot çeşitli işlemler için metot ve özelliklere sahip nesne döndürür.

Eposta bilgilerini doğrulamak

Bilgiler girildikten sonra girilen bilgilerin doğruluğunu test etmek için verify metodu kullanılır.

transporter.verify(function (error, success) {

  if (error) throw error;

  console.log('Bağlantı başarıyla sağlandı');

});

Bilgiler yanlışsa error parametresine hata nedeni ile ilgili bilgiler yazılacak, doğruysa success parametresi true değerini alacaktır.

Eposta göndermek

Eposta göndermek için sendMail metodu kullanılır.

Metodun ilk parametresi gönderilecek eposta içeriği ile ilgili bilgilerin bulunduğu bir nesne, ikincisi ise geri bildirim fonksiyon parametresidir.

Eposta göndermek için gerekli olan temel parametreler aşağıdaki gibidir.

let bilgiler = {
  from: 'Gönderen Adı Soyadı <eposta-adresi@eposta.uzanti>',
  to: 'gönderilen-eposta-adresi@eposta.uzanti',
  subject: 'Eposta konu başlığı',
  text: 'Eposta metin içeriği'
};

Gönderilecek eposta ile ilgili bilgiler girildikten sonra gönderilir.

transporter.sendMail(bilgiler, function (error, info) {

  if (error) throw error;

  console.log('Eposta gönderildi ' + info.response);

});

Geri bildirim fonksiyonu işlem sonucuna göre bir geri dönüş mesajı verecektir.

Çoklu eposta göndermek

Birden fazla eposta adresine gönderim yapmak için gönderilecek eposta ile ilgili bilgilerin bulunduğu bilgiler nesnesinin to özelliğine eposta adresi virgülle eklenmesi yeterli olacaktır.

let bilgiler = {
  from: 'Gönderen Adı Soyadı <eposta-adresi@eposta.uzanti>',
  to: 'eposta-adresi@eposta.uzanti, eposta-adresi-2@eposta.uzanti, eposta-adresi-3@eposta.uzanti',
  subject: 'Eposta konu başlığı',
  text: 'Eposta metin içeriği'
};

HTML eposta göndermek

HTML kodlarının olduğu bir eposta göndermek için eposta bilgilerinin bulunduğu nesneye html özelliğini eklenmesi yeterli olacaktır.

let bilgiler = {
  from: 'Gönderen Adı Soyadı <eposta-adresi@eposta.uzanti>',
  to: 'gönderilen-eposta-adresi@eposta.uzanti',
  subject: 'Eposta konu başlığı',
  text: 'Eposta metin içeriği',
  html: 'Eposta <b>HTML metin içeriği</b>'
};

Yazılan kodlar bir araya getirirsek;

'use strict';

const nodemailer = require('nodemailer');

let transporter = nodemailer.createTransport({
  host: 'SMTP sunucu adresi',
  port: 465,
  secure: true,
  auth: {
    user: 'eposta-adresi@eposta.uzanti',
    pass: 'eposta-şifresi'
  }
});

transporter.verify(function (error, success) {

  if (error) throw error;

  console.log('Bağlantı başarıyla sağlandı');

});

let bilgiler = {
  from: 'Gönderen Adı Soyadı <eposta-adresi@eposta.uzanti>',
  to: 'gönderilen-eposta-adresi@eposta.uzanti',
  subject: 'Eposta konu başlığı',
  text: 'Eposta metin içeriği',
  html: 'Eposta <b>HTML metin içeriği</b>'
};

transporter.sendMail(bilgiler, function (error, info) {

  if (error) throw error;

  console.log('Eposta gönderildi ' + info.response);

});

Dosya göndermek

Eposta eki olarak dosya göndermek için eposta bilgilerinin bulunduğu nesneye attachments özelliğinin eklenmesi yeterli olacaktır.

let bilgiler = {
  from: 'Gönderen Adı Soyadı <eposta-adresi@eposta.uzanti>',
  to: 'gönderilen-eposta-adresi@eposta.uzanti',
  subject: 'Eposta konu başlığı',
  text: 'Eposta metin içeriği',
  html: 'Eposta <b>HTML metin içeriği</b>',
  attachments: [{
    filename: 'dosya.txt',
    content: 'Dosya içeriği'
  }]
};

Dosya içeriğini kendimiz yazabileceğimiz gibi fs modülü içerisinde yer alan createReadStream metodu ile harici bir dosyayı ekleyebiliriz.

let bilgiler = {
  from: 'Gönderen Adı Soyadı <eposta-adresi@eposta.uzanti>',
  to: 'gönderilen-eposta-adresi@eposta.uzanti',
  subject: 'Eposta konu başlığı',
  text: 'Eposta metin içeriği',
  html: 'Eposta <b>HTML metin içeriği</b>',
  attachments: [{
    filename: 'dosya.pdf',
    content: fs.createReadStream('ek-dosya-adi.pdf')
  }]
};

Harici dosya göndermek için projeye fs modülünün eklenmesi gerekir.

Node.js Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!