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.
Cara Mengirimkan Email dengan Menggunakan Sistem NodeJS Nodemailer
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).
Langkah Membuat Service untuk Mengirim Email dengan Node JS
- langkah 1 – membuat project node baru
npm init
- langkah 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
- langkah 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');
- langkah 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'); } );
- langkah 5 – seting express dan port yang digunakan.
// express settings. var app = express(); var port = process.env.port || 3250;
- langkah 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();
- langkah 7 -membuat route api dengan menggunakan http post
mailRouter.route('/sendmail').post(function(req, res){ });
- langkah 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
- langkah 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"
}