Skip to main content

Part 2 - Nodemailer dengan Gmail OAuth2

· Baca dalam 3 menit
Irul
mail

Pada tulisan sebelumnya kita sudah mendapatkan OAuth Client ID, OAuth Client Secret dan juga Refresh Token untuk digunakan pada nodemailer.

Di tulisan kali ini kita akan melakukan implementasi untuk nodemailer pada nodejs.

Untuk menggunakan nodemailer kita perlu untuk memasang modul nodemailer dan juga googleapis dengan menjalankan perintah berikut pada project kita

npm install nodemailer googleapis

Biasanya saya membuat satu file baru, dengan postfix helper untuk membantu saya kedepannya jika ingin mengirimkan email, tinggal panggil saja helper ini

Kita import seluruh modul yang akan kita gunakan di helper ini

// mail.helper.js

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

//...

Lalu kita coba konfigurasi OAuth Client ID, OAuth Client Secret dan juga Refresh Token yang sudah kita dapatkan sebelumnya

// mail.helper.js

//...

const GMAIL_EMAIL_ADDRESS = ''; // masukkan email yang digunakan pada GCC
const GMAIL_CLIENT_ID = ''; // masukkan client id disini
const GMAIL_CLIENT_SECRET = ''; // masukkan client secret disini
const GMAIL_REFRESH_TOKEN = ''; // masukkan refresh token disini
const GMAIL_CALLBACK_URI = 'https://developers.google.com/oauthplayground';

const oauth2Client = new OAuth2(
GMAIL_CLIENT_ID,
GMAIL_CLIENT_SECRET,
GMAIL_CALLBACK_URI
);

oauth2Client.setCredentials({
refresh_token: GMAIL_REFRESH_TOKEN
});

//...

Selanjutnya, kita buat method transport dari nodemailer.createTransport untuk mengirimkan email menggunakan nodemailer

// mail.helper.js

//...

const transport = async () => {
const accessToken = await oauth2Client.getAccessToken();

return nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: GMAIL_EMAIL_ADDRESS,
clientId: GMAIL_CLIENT_ID,
clientSecret: GMAIL_CLIENT_SECRET,
refreshToken: GMAIL_REFRESH_TOKEN,
accessToken: accessToken.token,
},
});

};

module.exports = transport

Kode lengkapnya untuk mail.helper.js dibawah ini

// mail.helper.js

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

const GMAIL_EMAIL_ADDRESS = ''; // masukkan email yang digunakan pada GCC
const GMAIL_CLIENT_ID = ''; // masukkan client id disini
const GMAIL_CLIENT_SECRET = ''; // masukkan client secret disini
const GMAIL_REFRESH_TOKEN = ''; // masukkan refresh token disini
const GMAIL_CALLBACK_URI = 'https://developers.google.com/oauthplayground';

const oauth2Client = new OAuth2(
GMAIL_CLIENT_ID,
GMAIL_CLIENT_SECRET,
GMAIL_CALLBACK_URI
);

oauth2Client.setCredentials({
refresh_token: GMAIL_REFRESH_TOKEN
});

const transport = async () => {
const accessToken = await oauth2Client.getAccessToken();

return nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: GMAIL_EMAIL_ADDRESS,
clientId: GMAIL_CLIENT_ID,
clientSecret: GMAIL_CLIENT_SECRET,
refreshToken: GMAIL_REFRESH_TOKEN,
accessToken: accessToken.token,
},
});

};

module.exports = transport

Dan untuk menggunakan helper diatas kita tinggal import method transport dari mail.helper.js

// penggunaan.js

const transport = require('./mail.helper.js');

const mailOptions = {
from: 'sender@gmail.com', // pengirim (email kita sebelumnya)
to: 'recipient@gmail.com', // penerima email
subject: 'Contoh Email', // subject email
html: `<p>Hello! Ini adalah email test</p>`, // html body
}

const sendMail = async () => {
try{
const mailer = await transport();
await mailer.sendMail(mailOptions);
console.log('Email terkirim!');
}catch(err){
console.log(err);
console.log('Gagal!');
}
}

sendMail();

Nah, jadi begitu cara untuk mengirimkan email dengan Nodemailer dan Gmail OAuth2.

Semoga Bermanfaat!

← Baca tulisan lain