Tutorial langkah demi langkah ini menunjukkan kepada kamu Cara Mengirim Email Menggunakan Server SMTP Gmail dan mengirim email dari aplikasi web Node.js
yang dapat diterapkan ke Google Cloud Functions, AWS Lambda, RunCloud, atau dijalankan di pc atau laptop kamu.
Dan tidak seperti kebanyakan tutorial SMTP Node.Js
lainnya, yang menggunakan kombinasi nama pengguna dan kata sandi, pendekatan ini menggunakan OAuth dan tidak mengharuskan kamu mengaktifkan akses ke aplikasi yang kurang aman di akun Google kamu.
Daftar Isi
Buat Gmail OAuth Credentials
Buat project Google Cloud baru dan aktifkan Gmail API seperti yang dijelaskan di panduan sebelumnya.

Di bagian APIs & Services
, klik Credentials
> Create Credentials
> OAuth Client Id
untuk membuat ID Klien baru yang akan digunakan untuk mengidentifikasi aplikasi kamu ke server OAuth Google.
Tetapkan Jenis Aplikasi ke Web Application
dan masukkan URL berikut di Authorized Redirect Resource Identifiers
.
https://developers.google.com/oauthplayground
Mengklik tombol Create
akan memberikan nilai ID Klien OAuth dan Rahasia Klien yang diperlukan pada langkah berikutnya.
Buat Gmail Refresh Token

Selanjutnya, buat token penyegaran menggunakan Google Developer OAuth 2.0 Playground. Token akses berlaku selama satu jam, tetapi token penyegaran bersifat permanen (kecuali dicabut secara manual) dan dapat digunakan untuk menghasilkan token akses baru.
Buka google.com/oauthplayground, klik ikon pengaturan dan pilih opsi Use your own OAuth credentials
. Salin dan tempel ID Pelanggan dan Kata Sandi Pelanggan yang dibuat pada langkah sebelumnya.
Di bagian Select & Authorize APIs
, masukkan domain https://mail.google.com
dan klik tombol Authorize APIs
untuk membuat kode otorisasi.
Klik Exchange authorization code for tokens
untuk membuat token penyegaran yang akan kamu perlukan di langkah berikutnya.

Prepare the Node.js Application
Buat folder baru dan instal paket googleapis
dan nodemailer
.
mkdir gmail-smtp-sender
cd gmail-smtp-sender
npm init --y
npm install dotenv googleapis nodemailer --save
touch index.js
Buat file .env
baru di folder root kamu dan tambahkan kredensial kamu ke file tersebut. Tambahkan file ke .gitignore
untuk mencegahnya ditambahkan ke repositori.
// Replace these with your own credentials
CLIENT_ID = 'r2l82l8.apps.googleusercontent.com'
CLIENT_SECRET = 'GOCSPX-5n00Mqm5Jc45p'
REFRESH_TOKEN = '1//04yt8hEatvIr3uyk-ZJSYIhmYqMk4C4EqfPK24w'
REDIRECT_URL = 'https://developers.google.com/oauthplayground'
Buka file index.js
dan tambahkan kode berikut. kamu mungkin perlu mengganti email pengirim dengan alamat email akun Gmail yang kamu izinkan untuk mengirim email.
Nama server SMTP Gmail adalah smtp.gmail.com
dan port SMTP Gmail adalah 465
. Saat mengirim pesan melalui SMTP, kamu dapat mengirim hingga 100 email per hari.
const { google } = require('googleapis');
const nodemailer = require('nodemailer');
require('dotenv').config();
const sendEmail = async () => {
const oauth2Client = new google.auth.OAuth2(
process.env.CLIENT_ID,
process.env.CLIENT_SECRET,
process.env.REDIRECT_URL
);
oauth2Client.setCredentials({ refresh_token: process.env.REFRESH_TOKEN });
const accessToken = await oauth2Client.getAccessToken();
const myEmail = '[email protected]';
const smtpTransport = nodemailer.createTransport({
service: 'gmail',
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
type: 'OAuth2',
user: myEmail,
clientId: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
refreshToken: process.env.REFRESH_TOKEN,
accessToken,
},
});
const mailOptions = {
from: 'Sender Name <[email protected]>',
to: 'Receiver Name <[email protected]>',
subject: 'Test email 🚀',
text: 'This is a test email from Node.js 🎉',
html: 'This is a <b>test email</b> from Node.js 🎉',
};
try {
const response = await smtpTransport.sendMail(mailOptions);
console.log(`Email sent!`, response);
} catch (f) {
console.error(f.message);
} finally {
smtpTransport.close();
}
};
sendEmail().then(() => console.log('Done!'));
Analisa Gmail OAuth Yang Benar
kamu dapat mengirim email dari Gmail menggunakan domain https://www.googleapis.com/auth/gmail.send
, tetapi kamu harus menggunakan domain https://mail.google.com/
, yang dibatasi untuk SMTP Gmail. Jika OAuth client menggunakan cakupan yang berbeda saat meminta otorisasi untuk pengguna, aplikasi mengembalikan kesalahan
.535-5.7.8 Username and Password not accepted