Belajar Nodejs 11# – Cara aman mengirim Email menggunakan API Gmail, Nodemailer, SMTP, dan OAuth2

Ada banyak artikel di luar sana yang membahas mengenai tutorial mengirim email dengan nodejs menggunakan nodemailer dan Gmail tanpa menggunakan API dan layanan lainnya sehingga mengharuskan anda untuk mengaktifkan akses less secure app (aplikasi yang kurang aman).

Seperti pada penjelasan gambar diatas, dengan mengaktifkan less secure app maka akan membuat keamanan pada akun Gmail kita menjadi lebih rentan. Selain itu berdasarkan kebijakan google terbaru pada 30 Mei 2022, google sudah tidak lagi mendukung fitur penggunaan aplikasi pihak ketiga tersebut.

Untuk mengatasi hal ini, maka pada artikel ini saya akan membahas cara mengonfigurasi Nodemailer dengan SMTP, dan Web Service OAuth2 agar dapat mengirim email pada nodejs dengan aman menggunakan layanan API Gmail.

Mari kita mulai dengan memahami apa itu Nodemailer.

Apa itu Nodemailer ?

Nodemailer adalah modul Nodejs yang dapat mengirim email dari server dengan mudah, baik itu menggunakan layanan SMTP, dan Web Service OAuth2, dan API Gmail. Dengan email ini maka kita dapat berkomunikasi dengan pengguna lain atau mengirimkan informasi pada diri sendiri dengan menggunakan program.

Untuk itulah kita akan belajar konfigurasi OAuth2 dan API Gmail di Nodejs. Sedangkan API Nodemailer sendiri cukup sederhana, kita hanya melakukan kita melakukan 3 hal berikut ini :

  • Membuat transporter (objek yang digunakan untuk mengirim email) menggunakan SMTP atau mekanisme transport lainnya
  • Buat Objek MailOptions, Menyiapkan opsi pesan (siapa mengirim apa kepada siapa)
  • Gunakan metode Transporter.sendMail, Mengirim email dengan memanggil metode sendMail pada transporter

Memulai Nodejs dan Nodemailer

Sebelum ke pembahasan cara mengonfigurasi Nodemailer dengan SMTP, dan Web Service OAuth2 agar dapat mengirim email pada nodejs menggunakan layanan API Gmail, terlebih dahulu kita akan memulainya dengan nodejs. Anda dapat menjalankan perintah dibawah ini untuk memastikan apakah anda telah menginstal Nodejs dan npm:

node --version

npm –version
nodemailer nodejs gmail api

Jika kedua perintah tersebut menunjukkan versi, Silahkan ikuti pembahasan selanjutnya. tapi jika tidak, silahkan ikuti tutorial cara instal nodejs dan npm dibawah ini :

Cara install nodejs di windows dan Linux

Setelah nodejs sudah diinstal, selanjutnya kita akan mulai menginstall nodemailer serta membuat folder proyek untuk memasukkan program email Anda. langkah-langkahnya adalah sebagai berikut :

1. Buka terminal atau CMD lalu buat direktori untuk proyek Anda dengan perintah dibawah ini :

mkdir EmailerApp<br>cd EmailerApp

2. Setelah masuk ke dalam direktori yang baru dibuat, jalankan perintah berikut :

npm init

3. Jika ada pemberitahuan klik ”y” saja lalu instal nodemailer menggunakan perintah :

npm install nodemailer googleapis
nodemailer nodejs gmail api

Sekarang kita sudah mempersiapkan Nodejs dan Nodemailer, untuk langkah selanjutnya kita akan beralih dulu tahap Konfigurasi Google Cloud Platform.

Setting Google Cloud Platform

Pada tahap ini, saya asumsikan anda sudah memiliki akun Google Cloud Platform, platform ini digunakan sebagai prasyarat utama dalam mengonfigurasi Nodemailer dan API Gmail dengan aman pada nodejs menggunakan SMTP, dan OAuth2. Adapun langkah-langkah dalam mengkonfigurasi google cloud platform adalah sebagai berikut :

1. Buka alamat Google Cloud Platform

2. Buat project baru dengan mengklik menu project di sudut kiri atas, lalu klik ”New Project”

nodemailer nodejs gmail api

3. Buat nama project nya, lalu untuk properti location, anda dapat membiarkannya sebagai No organization.

nodemailer nodejs gmail api

4. Setelah itu, buka menu navigasi dengan mengklik tiga garis putus-putus di sudut kiri atas dan pilih APIs and Services > OAuth consent screen

nodemailer nodejs gmail api

5. Pada bagian User type pilih “external”, setelah itu klik tombol ”Create”

nodemailer nodejs gmail api

6. Pada layar berikutnya, isi informasi aplikasi yang diperlukan, setelah itu klik ”Save and Continue”.

7. Kita akan melewati bagian ” Scopes” dengan mengklik ”Save and Continue”.

8. Dibagian “Test users” klik tombol “Add user” lalu masukkan alamat Email yang anda gunakan pada Google Cloud. Setelah itu klik “Add” dan ”Save and Continue”.

9.Bagian ”summary” merupakan hasil dari informasi yang telah dibuat sebelumnya. lalu scroll kebawah bawah dan klik tombol ”back to dashboard”

Konfigurasi Pengaturan OAuth2

Pada tahap ini kita akan mengkonfigurasi kredensial OAuth2 dengan cara mendapatkan Client ID dan Client Secret. ID Client ini nantinya akan digunakan pada saat mengintegrasikan OAuth2 dengan API Gmail. Langkah-langkahnya adalah sebagai berikut :

1. Buka tab ”Credentials” di atas OAuth consent screen.

2. Klik “+Create Credentials” lalu pilih “OAuth Client ID”.

3. Pada bagian application type, pilih”Web application” lalu buat nama aplikasinya.

4. Pada bagian Authorized Redirect URI, tambahkan link https://developers.google.com/oauthplayground, setelah itu klik tombol “Create”

5. Setelah sudah di Create, maka akan ada tampilan Client ID dan Client Secret. Simpan ID ini untuk Anda sendiri dan jangan pernah memaparkannya dengan cara apa pun.

nodemailer nodejs gmail api

Integrasi OAuth2 dengan API Gmail

Pada tahap ini kita akan mengkonfigurasi OAuth2 dengan API Gmail dengan cara mendapatkan refresh token dan access token. kedua token ini nantinya akan kita gunakan di dalam objek transporter di Nodemailer di nodejs. Oleh sebab itu kita perlu mendapatkan Refresh token tersebut. Adapun langkah-langkahnya adalah sebagai berikut :

1. Buka halaman https://developers.google.com/oauthplayground

2. Klik ikon roda gigi di sebelah kanan

3. Centang kotak “use your own OAuth2 Credentials”

4. Masukkan “ID Client” dan” OAuth Client Secret” yang telah anda simpan.

nodemailer nodejs gmail api

5. Setelah itu lihat ke sisi kiri, dibagian ”Select & authorize APIs” Gulir ke bawah hingga Anda melihat “Gmail API v1”.

6. Klik Gmail API v1 lalu Centang https://mail.google.com/ dan klik tombol “authorize APIs”

nodemailer nodejs gmail api

7. Layar berikutnya akan ada informasi dari google bahwa anda masih belum memverifikasi aplikasi ini, Klik tombol ”Lanjutkan” untuk memverifikasinya.

nodemailer nodejs gmail api

8. Di layar berikutnya, Klik tombol ”Lanjutkan” untuk memberikan izin kepada proyek Anda agar bisa berinteraksi dengan akun gmail Anda.

nodemailer nodejs gmail api

9. Setelah itu layer akan dialihkan kembali ke “OAuth 2.0 Playground”, klik tombol biru “Exchange authorization code for tokens”

10. Setelah refresh token dan access token dibuat, salin dan simpan untuk nantinya kita masukkan ke dalam kode program.

nodemailer nodejs gmail api

Membuat kode program

Pada tahap ini merupakan langkah terakhir pada pembahasan mengirim Email serta mengonfigurasi Nodemailer dan API Gmail menggunakan SMTP, dan OAuth2 pada nodejs dengan aman. Kita akan menulis kode Program dan langsung menguji coba dengan mengirim email.

1. Buatlah file Javascript dengan nama index.js dan salin kode berikut menggunakan teks editor anda :

const nodemailer = require("nodemailer");
const { google } = require("googleapis");
const OAuth2 = google.auth.OAuth2;

const oauth2Client = new OAuth2(
    "Masukkan OAuth clientId anda disini", // ClientID
    "Masukkan OAuth clientSecret anda disini", // Client Secret
    "https://developers.google.com/oauthplayground" // Redirect URL
);

oauth2Client.setCredentials({
    refresh_token: "Masukkan OAuth refresh Token anda disini"
});
const accessToken = oauth2Client.getAccessToken()

const smtpTransport = nodemailer.createTransport({
    service: "gmail",
    auth: {
         type: "OAuth2",
         user: "Masukkan alamat Email anda disini", 
         clientId: "Masukkan OAuth clientId anda disini",
         clientSecret: "Masukkan OAuth clientSecret anda disini",
         refreshToken: "Masukkan OAuth refresh Token anda disini",
         accessToken: accessToken
    }
});

tls: {
    rejectUnauthorized: false
  }

  const mailOptions = {
    from: "Masukkan alamat Email anda disini",
    to: "Masukkan alamat Email penerima disini",
    subject: "Mengirim Email dengan Aman Menggunakan Node.js",
    generateTextFromHTML: true,
    html: "<b>Saya sedang belajar mengirim Email menggunakan protokol keamanan OAuth2 pada pemrograman Node.js</b>"
};

smtpTransport.sendMail(mailOptions, (error, response) => {
    error ? console.log(error) : console.log(response);
    smtpTransport.close();
});


2. Sekarang anda dapat menjalankan program email yang telah dibuat dengan perintah berikut ini :

node index.js

3. Jika terlihat seperti gambar dibawah ini, maka program sudah berhasil mengirim email yang kita buat.

nodemailer nodejs gmail api

4. Terakhir silahkan cek inbox dengan membuka Gmail pada alamat email yang dituju/penerima. maka hasilnya akan terlihat seperti gambar dibawah ini.

Pembahasan Kode Program

Pertama, kita akan membawa paket modul yang telah didownload dengan kode berikut :

const nodemailer = require("nodemailer");<br>const { google } = require("googleapis");<br>const OAuth2 = google.auth.OAuth2;

Pada tulisan “string” dibawah ini merupakan informasi yang harus anda masukkan berdasarkan data anda seperti : ID Client, Secret, refresh token, alamat email dan email penerima.

“Masukkan OAuth clientId anda disini”
"Masukkan OAuth clientSecret anda disini"
"Masukkan OAuth refresh Token anda disini"
"Masukkan alamat Email anda disini",
"Masukkan alamat Email penerima disini",

Adapun keterangan lainnya pada kode program diatas adalah sebagai berikut :

const oauth2Client = new OAuth2, menyiapkan klien OAuth dengan semua informasi yang telah disimpan, Anda memerlukan ID klien, rahasia klien, dan URL untuk OAuth Playground yang kita gunakan sebelumnya.

oauth2Client.setCredentials, kita akan menggunakan token Refresh yang kita pegang untuk mendapatkan token Access dari OAuth.

const smtpTransport = nodemailer.createTransport, method pengiriman email menggunakan SMTP dan Nodemailer

tls: {rejectUnauthorized: false}, menambahkan atribut berikut ke objek javascript

const mailOptions, membuat konten email yang diperlukan

smtpTransport.sendMail, Mengirim konten email dengan method sendMail pada transporter

to: jika Anda ingin mengirim email ke beberapa akun, cukup masukkan semua akun dalam string yang sama, setelah itu dipisahkan dengan koma.

Contoh : to: ‘[email protected], [email protected], [email protected]

Begitulah cara mengirim email dengan aman pada nodejs menggunakan layanan API Gmail dan Nodemailer, SMTP, dan Web Service OAuth2. Silahkan dishare artikel ini jika bermanfaat dan jangan lupa baca juga artikel mengenai Nodejs selanjutnya yaitu : Belajar Nodejs 12# Cara Menggunakan Database MySQL pada Nodejs

Tinggalkan Balasan

Scroll to Top