lifelong learner — urip iku urup, currently working on accenture.

membuat webservice untuk mengirim email dengan nodemailer

0
Degananda.com -

dalam sebuah project terkadang kita membutuhkan fungsi untuk mengirimkan email kepada user dengan tujuan tertentu. Misalnya untuk merubah/reset password , konfirmasi akun atau hal-hal lainnya. Terdapat banyak opsi untuk mengakodomasi kebutuhan tersebut(fungsi email). yakni menggunakan API dari penyedia layanan email seperti  mailchimp atau mailgun ataupun kita dapat membuat api tersendiri dengan menggunakan smtp gmail/yahoo. Perlu diketahui bahwa gmail membatasi maksimal pengiriman email untuk akun free sebanyak 500 email per hari(24 jam). Sedangkan mailgun dapat memberikan sebanyak 10.000 email perharinnya untuk akun free.

Pada ulasan kali ini akan dibahas bagaimana membuat web services untuk mengirimkan email menggunakan smtp gmail. Beberapa hal yang harus disiapkan adalah :

  • akun gmail dengan konfigurasi “allowing less secure apps to your account”. Untuk mengaktifkan konfigurasi tersebut dapat dipahami dan dilakukan disini. Konfigurasi tersebut diperlukan agar nodejs melalui library nodemailer dapat melakukan autentikasi terhadap akun gmail kita.
  • nodejs, pada ulasan ini kami menggunakan versi 6.9.2, untuk pengecekan versi nodejs dapat dilakukan dengan perintah node -v pada cmd/terminal.

library yang digunakan untuk membuat webservices pengiriman email dengan smtp gmail adalah sebagai berikut :

  • http-auth, library ini berfungsi untuk memberikan basic autentikasi saat mengakses endpoint web services. Tujuannya adalah mengamankan webservices dari orang-orang yang tidak bertanggung jawab. Namun perlu diketahui metode autentikasi basic ini tidak terlalu memiliki tingkat keamanan yang tinggi.
  • nodemailer. library yang berfungsi untuk mengirimkan email dengan penyedia email seperti gmail.
  • express. library untuk melakukan routing, sebagai middleware dan fungsi-fungsi http
  • bodyparser. library untuk membaca json dari http post.
  • express validator. library untuk memvalidasi json yang dikirimkan ke server.
  • cors (tidak wajib).

here we go

  1. membuat project node baru
    npm init
  2. install seluruh library / module node yang diperlukan
    npm install express --save
    npm install body-parser --save
    npm install nodemailer --save
    npm install http-auth --save
    npm install express-validator --save
    npm install cors --save
  3. load masing-masing module

    var express = require('express');
    var nodemailer = require('nodemailer');
    var auth = require('http-auth');
    var bodyparser = require('body-parser');
    var cors = require('cors');
    var expressValidator = require('express-validator');
  4. lakukan setting untuk basic auth

    // auth settings
    var basic = auth.basic({
      realm: 'Web.'
    }, function (username, password, callback) { // Custom authentication method.
      callback(username === 'username' && password === 'passwordxxx');
    }
    );
  5. seting express dan port yang digunakan.
    // express settings.
    var app = express();
    var port = process.env.port || 3250;
  6. mengaktifkan cors(optional) dan bodyparser serta menginisiasi router

    app.use(bodyparser.urlencoded({extended:true}));
    // body parser setting
    app.use(expressValidator());
    app.use(bodyparser.json());
    // router
    var mailRouter = express.Router();
  7. membuat route api dengan menggunakan http post
    mailRouter.route('/sendmail').post(function(req, res){
    });
    
  8. melakukan validasi dan menjalankan nodemailer untuk mengirimkan pesan dengan input dari request body.

    mailRouter.route('/sendmail').post(function(req, res){
    req.assert('subjectEmail', 'subject email diperlukan').notEmpty();
    req.assert('isiEmail', 'isi email html diperlukan').notEmpty();
    req.assert('tujuanEmail', 'tujuan email diperlukan').notEmpty();var errors = req.validationErrors();
    if(!errors){
      var myNodeMailer = nodemailer.createTransport({
      service: 'Gmail',
       auth: {
        user: 'dega@gmail.com', // Your email id
        pass: 'xxxxxxx' // Your password
       }
      });
    
      var text = req.body.isiEmail;
      var mailOptions = {
        from: 'dega@gmail.com', // sender address
        to: req.body.tujuanEmail, // list of receivers
        subject: req.body.subjectEmail, // Subject line
        html: text
      };
    
      myNodeMailer.sendMail(mailOptions, function(error, info){
       if(error){
        res.status(400).send({
         status_code : -1,
         status_message : error
        });
       } else {
         res.status(200).send({
          status_code : 1,
          status_message : 'email has been sent.'
        });
       } 
      });// end send mail
    
    } else {
      res.status(400).send({
       status_code : -2,
       status_message : 'JSON error',
       error_details : errors
      });
    }
    
    }); // end route
    
  9. Langkah terahir, mengkatifkan basic http-auth , routing dan express.
    app.use(auth.connect(basic));
    app.use('/api', mailRouter);
    app.listen(port, function(){ 
     console.log('application running on port : ' + port); 
    });
    

    10. Done!

setelah selesai dapat diakses langsung melalui url localhost:port_yang_digunakan/api/sendmail dengan http post. jangan lupa memberikan header json dan dengan isi request body sebagai berikut :


{
"tujuanEmail" : "tujuanemail@a.com",
"isiEmail" : "pesan dalam html",
"subjectEmail" : "subject dari email"
}