Tampilkan postingan dengan label Javascript. Tampilkan semua postingan
Tampilkan postingan dengan label Javascript. Tampilkan semua postingan
Cara Mengirim Email Massal dengan JavaScript (Node.js) dan Excel

Cara Mengirim Email Massal dengan JavaScript (Node.js) dan Excel

Cara Mengirim Email Massal dengan JavaScript (Node.js) dan Excel



Mengirim email massal sering kali diperlukan dalam berbagai situasi, seperti kampanye pemasaran, pemberitahuan pelanggan, atau komunikasi internal perusahaan. Dalam artikel ini, kita akan membahas cara mengirim email massal menggunakan JavaScript (Node.js) dengan sumber data dari file Excel.


Apa yang Kita Butuhkan?

Sebelum mulai, pastikan Anda memiliki:

Node.js terinstal di komputer Anda
Akun email SMTP (misalnya Gmail, Outlook, atau layanan SMTP lainnya)
File Excel (.xlsx) berisi daftar penerima


Langkah 1: Persiapan Proyek Node.js

Pertama, buat folder proyek dan instal dependensi yang dibutuhkan:

mkdir email-massal cd email-massal npm init -y npm install nodemailer xlsx dotenv

📌 Penjelasan:

  • nodemailer → Untuk mengirim email

  • xlsx → Untuk membaca file Excel

  • dotenv → Untuk menyimpan kredensial dengan aman


Langkah 2: Buat File Excel Berisi Daftar Penerima

Buat file emails.xlsx dengan format seperti ini:

Nama Email
Andi andi@email.com
Budi budi@email.com
Citra citra@email.com

Langkah 3: Konfigurasi Kredensial SMTP

Buat file .env untuk menyimpan kredensial email Anda:

SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_USER=your-email@gmail.com SMTP_PASS=your-email-password

🔒 Catatan: Jika menggunakan Gmail, Anda perlu mengaktifkan App Password atau menggunakan layanan SMTP lain.


Langkah 4: Buat Script untuk Mengirim Email

Buat file sendEmails.js dan tambahkan kode berikut

const nodemailer = require("nodemailer");
const xlsx = require("xlsx");
require("dotenv").config();

// 1. Baca Data dari File Excel
const readExcel = (file) => {
	const workbook = xlsx.readFile(file);
	const sheet = workbook.Sheets[workbook.SheetNames[0]];
	return xlsx.utils.sheet_to_json(sheet);
};

// 2. Konfigurasi Transporter Email
const transporter = nodemailer.createTransport({
	host: process.env.SMTP_HOST,
	port: process.env.SMTP_PORT,
	secure: false,
	auth: {
		user: process.env.SMTP_USER,
		pass: process.env.SMTP_PASS
	}
});

// 3. Fungsi Mengirim Email
const sendEmail = async (recipient) => {
	const mailOptions = {
		from: process.env.SMTP_USER,
		to: recipient.Email,
		subject: "Email Massal dari Node.js",
		text: `Halo ${recipient.Nama}, ini adalah email massal yang dikirim menggunakan Node.js dan Excel!`,
	};

	try {
		await transporter.sendMail(mailOptions);
		console.log(`✅ Email terkirim ke ${recipient.Email}`);
	} catch (error) {
		console.error(`❌ Gagal mengirim ke ${recipient.Email}: ${error.message}`);
	}
};

// 4. Baca Data dan Kirim Email
const recipients = readExcel("emails.xlsx");
recipients.forEach((recipient) => {
	sendEmail(recipient);
});

Langkah 5: Jalankan Script

Setelah semuanya siap, jalankan perintah berikut di terminal:

node sendEmails.js

Jika berhasil, Anda akan melihat output seperti ini:

✅ Email terkirim ke andi@email.com ✅ Email terkirim ke budi@email.com ✅ Email terkirim ke citra@email.com

🎉 Selesai! Sekarang Anda telah berhasil mengirim email massal menggunakan Node.js dan file Excel.


Kesimpulan

Dengan Node.js, kita bisa mengotomatisasi pengiriman email dalam jumlah besar dengan mudah. Menggunakan file Excel sebagai sumber data membuatnya fleksibel untuk berbagai kebutuhan. Jika ingin mengembangkan lebih lanjut, Anda bisa:

  • Menambahkan template HTML agar email lebih menarik

  • Menggunakan layanan cloud SMTP seperti SendGrid atau Mailgun

  • Menjadwalkan pengiriman email menggunakan cron jobs

Semoga bermanfaat! 🚀

BOT WhatsApp Web - Menggunakan Local Database SQLite

BOT WhatsApp Web - Menggunakan Local Database SQLite

Halo, sudah lama sekali ingin sharing terkait dengan BOT Whatsapp web ini, tapi memang karena belum tersedia banyak waktu gabut untuk update, jadi baru sempat sekarang untuk sharing. 😅


Target artikel ini sih pengennya bisa selalu diupdate, kalaupun ternyata belum bisa mohon bantuan colek ya, karena bisa jadi saya digulung coding yang lain.. haha.. 😁

Cara Penggunaan :

  1. Pastikan telah menginstall nodejs windows 32 bit atau 64bit
  2. Download & Extract project (link ada dibawah artikel)
  3. Buka Commandprompt pada folder extract
  4. Jalankan perintah "npm install" untuk menginstall semua library yang dibutuhkan
  5. Jalankan perintah npm start untuk mulai membuka BOT Whatsapp
  6. Untuk pertama kali, silahkan scan QRCode yang terbuka pada browser chromium
  7. BOT standby untuk menerima perintah

Dalam artikel ini ada beberapa point keyword yang akan saya bahas, diantaranya adalah :

  • Membuat bot whatsapp autorespon
  • Menyimpan semua chat whatsapp yang masuk
  • Menggunakan SQLite untuk menyimpan chat whatsapp
  • Menyimpan attachment dari whatsapp web via nodejs

Timeline proses pembuatan :



Tanggal 15 September 2023

==> Membuat BOT whatsapp dari bahasa pemrograman javascript (nodejs) dengan library dari whatsapp-web.js
==> Membuat database chat menggunakan SQLite
==> Membuat fungsi insertchat untuk semua pesan whatsapp yang masuk menggunakan library sqlite3






Tanggal 20 September 2023

==> Membuat tabel instruksi, tabel ini berfungsi sebagai wadah instruksi apa saja yang didukung. jadi ketika ada pesan masuk, whatsapp bot akan memfilter mana pesan yang mengandung instruksi atau bukan, jika iya maka response pesan tersebut.


==> Menangkap attachment yang dikirim via whatsapp bot dan simpan dalam folder attachment. dalam hal ini, format file dibatasi menjadi beberapa, yaitu formal .xlsx, .pdf, .jpeg dan .webp (sticker file) jika diluar format tersebut, aplikasi akan menyimpannya dengan ekstensi .unknown.



FYI : dibatasi menjadi 4 format karena hampir tak terhingga jenis file yang bisa dikirim via whatsapp, jadi saya belum bisa menentukan format yg pas, dan juga terkait dengan keamanan (worry file virus yang dikirim)

BOT Autofollow Instagram | Javascript | Console Browser

BOT Autofollow Instagram | Javascript | Console Browser

Rasanya kurang pas jika akun instagram kamu sepi pengunjung, padahal galeri foto, bio dan sebagainya sudah ciamik. Nah, menjawab hal ini saya sudah coba ulik salah satu kebiasaan para pengguna instagram yaitu : akan selalu kepo ketika ada notifikasi masuk karena ada yang follow akun instagram mereka, baik akun yang difollow sesuai dengan minat atau tidak.

BOT Instagram

Jika tidak sesuai minat, biasanya akan di skip atau hanya dilihat galerinya, dan Jika sesuai minat biasanya akan follow balik, hingga "berani" DM si yang follow.

logikanya cukup sederhana, namun cukup powerfull. jika akun yang dimaksud sesuai dengan target, maka jangankan follow balik, kalau jenis akunnya dagangan yang sesuai dengan selera bukan tidak mungkin kita bisa arahkan untuk transaksi juga.

menjawab peluang dan kebutuhan ini, saya coba buat script autofollow instagram hanya bermodalkan console browser. script berikut bisa digunakan hampir disemua browser karena menggunakan console javascript.

berikut untuk scriptnya :



 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
let waktu=[5000,10000,20000,30000,40000,50000,60000];
var TagFollow = document.getElementsByTagName("button");
var SearchFollow = "Follow";
var foundFollow;
function klikfollow(){
for (var i = 0; i < TagFollow.length; i++) {
if (TagFollow[i].textContent == SearchFollow) {
foundFollow = TagFollow[i];
foundFollow.click(); break;
}
}
}
var i = 1;
function myLoop() {
setTimeout(function() {
console.log(new Date().toLocaleTimeString());
klikfollow();
document.getElementsByTagName("ul")[3].scrollIntoView(false);
i++;
if (i < 500) {
myLoop();
}
}, waktu.sort((elel,elem2)=>Math.random()-Math.random())[1])}
myLoop();




catatan penting :

  • pada bagian script :
document.getElementsByTagName("ul")[3].scrollIntoView(false);

fungsi script diatas adalah untuk scroll pop up list akun target, adakalanya index yang bernilai [3] berubah atau tidak berjalan, silahkan ganti-ganti (bisa diberi nilai [2] atau [3] atau [4] dan seterusnya.

saran dari saya, baiknya script tersebut dinonaktifkan, dan menggunakan scroll manual menggunakan keyboard, cara menonaktifkan fungsi scroll tersebut dengan cara beri double slash seperti berikut :

//document.getElementsByTagName("ul")[3].scrollIntoView(false);
  • pada bagian script
let waktu=[5000,10000,20000,30000,40000,50000,60000];

nilai yang berada dalam kurung kotak adalah dalam satuan mili detik 5000 = 5detik dan seterusnya. saran dari saya, rubah nilai tersebut menjadi waktu yang lebih panjang dan waktu yang bervariasi (tambah waktu dengan menambahkan koma diakhir nilai) agar akun instagram tidak sering di blok oleh instagram.

Untuk cara penggunaannya bisa langsung melipir ke video berikut ya :




BOT Instagram AutoLike Post Instagram - Via Console Browser

BOT Instagram AutoLike Post Instagram - Via Console Browser

Ada banyak cara agar akun-akun instagram mendapatkan perhatian dari akun target, salah satunya adalah dengan memberikan like tertentu pada postingan akun target. Bukan karena menyukai postingan tersebut, namun lebih supaya akun target melihat notifikasi dari akun kita. ya tentu saja agar akun target melihat galeri dari akun kita.

Atas dasar kebutuhan itulah, saya mencoba membuat BOT sederhana yang dapat me'like post-post pada akun target. kenapa sederhana? karena tidak butuh tools dan skill yang belibet dalam penggunaannya. cukup hanya menggunakan console bawaan dari browser.


berikut script yang bisa digunakan untuk fungsi tersebut.



 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var nodes = document.querySelectorAll(".FPmhX");
var list = [].slice.call(nodes);
var innertext = list.map(function(e) { return "https://www.instagram.com/"+ e.innerText +"/"; }).join(', ');
var urlList = innertext.split(", ");
var wnd;
var curIndex = 0;

function openWindow(){
wnd = window.open(urlList[curIndex], '', "width=800,height=600,location=no,menubar=no,status=no,titilebar=no,resizable=no,");
setTimeout(function () {
wnd.addEventListener("beforeunload", function() {
setTimeout(function(){
wnd.document.getElementsByClassName("_9AhH0")[0].click()
setTimeout(function(){
wnd.document.getElementsByClassName("QBdPU")[2].click()
setTimeout(function(){
wnd.document.getElementsByClassName("_65Bje coreSpriteRightPaginationArrow")[0].click();
setTimeout(function(){wnd.document.getElementsByClassName("QBdPU")[2].click()},3000);
},5000);
},5000);
},5000);

});
wnd.close();
curIndex++;
if(curIndex < 5) openWindow();
}, 20000);
}

openWindow();