Cara Kirim Email Otomatis dari Google Sheets (Apps Script)
TL;DR
Google Sheets bisa kirim email otomatis lewat Apps Script pakai fungsi MailApp.sendEmail. Kamu tinggal siapkan kolom email dan isi pesan di sheet, tulis skrip yang baca tiap baris, lalu pasang trigger biar jalan otomatis tiap hari. Kuota gratisnya 100 email per hari buat akun Gmail biasa dan 1.500 per hari buat Google Workspace.
Google Sheets bisa kirim email sendiri. Gak perlu Zapier, gak perlu bayar apa-apa — cukup Apps Script yang udah nempel gratis di tiap spreadsheet.
Kasus paling sering: kirim reminder tagihan ke pelanggan, kirim laporan mingguan ke tim, atau kirim notifikasi kalau stok barang menipis.
Setup pertama makan waktu sekitar 15 menit. Setelah itu jalan sendiri tiap hari.
Di tutorial ini kamu bakal bikin sistem reminder tagihan yang jalan otomatis tiap pagi jam 8, lengkap sama pengaman biar email gak kekirim dobel.
Apa itu Apps Script?
Apps Script adalah editor kode bawaan Google yang bisa ngontrol Sheets, Gmail, Drive, dan Calendar. Bahasanya JavaScript.
Kamu gak perlu install apa-apa. Buka Google Sheets, klik menu Ekstensi, pilih Apps Script. Editornya langsung kebuka di tab baru.
Kalau kamu pernah nulis rumus IF di spreadsheet, kamu udah punya modal buat paham logika skrip ini. Bedanya cuma di sintaks.
Gimana cara siapkan sheet-nya?
Bikin sheet dengan lima kolom persis kayak gini:
| A: Nama | B: Email | C: Tagihan | D: Jatuh Tempo | E: Status Kirim |
|---|---|---|---|---|
| Siti Rahayu | siti@contoh.com | 450000 | 2026-06-15 | |
| Budi Santoso | budi@contoh.com | 1200000 | 2026-06-16 | |
| Ayu Lestari | ayu@contoh.com | 275000 | 2026-06-18 |
Kolom E dibiarkan kosong. Itu yang bakal diisi skrip setelah email terkirim.
Kolom E ini yang paling penting dari semuanya. Tanpa dia, tiap kali skrip jalan, Siti bakal dapat email tagihan yang sama berulang-ulang.
Gimana cara nulis skrip kirim emailnya?
Buka Ekstensi, terus Apps Script. Hapus kode contoh yang ada, ganti sama ini:
function kirimReminderTagihan() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tagihan');
const data = sheet.getDataRange().getValues();
// Mulai dari baris 2 (baris 1 itu header)
for (let i = 1; i < data.length; i++) {
const nama = data[i][0];
const email = data[i][1];
const tagihan = data[i][2];
const jatuhTempo = data[i][3];
const status = data[i][4];
// Lewati kalau udah pernah dikirim
if (status !== '') continue;
// Lewati kalau emailnya kosong
if (!email) continue;
const subjek = 'Pengingat Tagihan - Jatuh Tempo ' +
Utilities.formatDate(new Date(jatuhTempo), 'Asia/Jakarta', 'd MMM yyyy');
const pesan =
'Halo ' + nama + ',\n\n' +
'Tagihan kamu sebesar Rp ' + tagihan.toLocaleString('id-ID') + '\n' +
'jatuh tempo tanggal ' +
Utilities.formatDate(new Date(jatuhTempo), 'Asia/Jakarta', 'd MMMM yyyy') + '.\n\n' +
'Terima kasih,\nToko Berkah';
MailApp.sendEmail(email, subjek, pesan);
// Tandai sudah terkirim
sheet.getRange(i + 1, 5).setValue(new Date());
}
}
Simpan pakai Ctrl+S. Kasih nama proyeknya bebas.
Bagian mana yang perlu kamu pahami?
Empat baris yang bikin semuanya jalan.
getDataRange().getValues() — ini narik semua isi sheet jadi array dua dimensi. Baris pertama indeksnya 0, jadi loop-nya mulai dari 1 buat lewatin header.
if (status !== '') continue; — ini pengaman anti-dobel. Kalau kolom E udah ada isinya, skrip lompat ke baris berikutnya.
MailApp.sendEmail(email, subjek, pesan) — tiga argumen: ke siapa, judulnya apa, isinya apa. Sesederhana itu.
sheet.getRange(i + 1, 5).setValue(new Date()) — nulis waktu kirim ke kolom E. Angka 5 itu nomor kolom E, dan i + 1 soalnya baris di spreadsheet mulai dari 1 sementara array mulai dari 0.
Gimana cara jalanin dan kasih izin?
Di editor Apps Script, klik tombol Run. Pertama kali, Google bakal minta izin.
- Muncul dialog Authorization required. Klik Review permissions.
- Pilih akun Google kamu.
- Muncul peringatan "Google hasn't verified this app". Klik Advanced, terus Go to [nama proyek] (unsafe).
- Klik Allow.
Peringatan "unsafe" itu normal. Skripnya kamu yang tulis sendiri, jadi Google belum meninjaunya — wajar.
Setelah Allow, skrip langsung jalan. Cek inbox penerima, terus cek kolom E di sheet — harusnya udah keisi tanggal.
Gimana cara bikin jalan otomatis tiap hari?
Skrip di atas masih harus diklik manual. Biar jalan sendiri, pasang trigger.
- Di editor Apps Script, klik ikon jam alarm (Triggers) di sidebar kiri.
- Klik Add Trigger di pojok kanan bawah.
- Choose which function to run:
kirimReminderTagihan - Select event source: Time-driven
- Select type of time based trigger: Day timer
- Select time of day: 8am to 9am
- Klik Save.
Selesai. Tiap pagi antara jam 8 dan 9, skrip jalan sendiri dan kirim email ke baris yang kolom E-nya masih kosong.
Perlu diingat, waktu trigger ngikutin timezone spreadsheet. Cek di File, Settings, pastikan timezone-nya Jakarta.
Contoh kasus: toko_berkah kirim 34 reminder per hari
Aku pasang sistem ini buat sebuah warung sembako yang punya 127 pelanggan langganan bulanan. Sebelumnya, pemiliknya nagih lewat WhatsApp satu-satu.
| Sebelum otomatis | Sesudah otomatis |
|---|---|
| 45 menit per hari nulis pesan | 0 menit — jalan sendiri jam 8 |
| Rata-rata 12 pelanggan kelewat per bulan | 0 kelewat |
| Pembayaran tepat waktu: 58% | Pembayaran tepat waktu: 79% |
Rata-rata 34 email terkirim per hari. Masih jauh di bawah kuota gratis 100 email.
Yang paling kerasa bukan hemat 45 menitnya. Yang kerasa naiknya pembayaran tepat waktu 21 poin — gara-gara reminder-nya konsisten, bukan tergantung mood.
Apa kesalahan umum waktu setup email otomatis?
Lupa kolom status. Ini nomor satu. Tanpa penanda terkirim, tiap trigger jalan semua orang dapat email lagi. Pelanggan kamu bakal dapat 30 email tagihan dalam sebulan.
Nulis nama sheet yang salah. getSheetByName('Tagihan') harus sama persis, termasuk huruf besar-kecil dan spasi. "tagihan" beda dari "Tagihan".
Nembus kuota harian. Kalau daftar kamu 300 baris dan akunnya Gmail gratis, skrip bakal error di email ke-101. Tapi kolom status nyelametin kamu — besoknya skrip lanjut dari yang belum kekirim.
Gak tes ke email sendiri dulu. Ganti semua alamat di kolom B jadi email kamu, jalanin, lihat hasilnya. Baru masukkan alamat asli. Email yang udah terkirim gak bisa ditarik.
Format tanggal berantakan. Kalau kolom D dibaca sebagai teks bukan tanggal, Utilities.formatDate bakal error. Pastikan formatnya tanggal beneran di spreadsheet.
FAQ
Berapa banyak email yang bisa dikirim per hari dari Google Sheets?
Akun Gmail gratis dapat kuota 100 email per hari lewat Apps Script. Akun Google Workspace berbayar dapat 1.500 per hari. Kuota ini dihitung per 24 jam bergulir. Kalau skrip nyoba kirim melebihi kuota, dia bakal error dan berhenti — makanya kolom status terkirim penting.
Apakah email yang dikirim Apps Script masuk spam?
Emailnya dikirim dari alamat Gmail kamu sendiri, jadi reputasinya sama kayak email manual. Yang bikin masuk spam biasanya isinya: subjek terlalu promosi atau kirim ke ratusan orang yang gak pernah kontak kamu. Buat reminder tagihan ke pelanggan yang udah kenal, hampir gak pernah kena.
Apps Script bisa kirim email dengan lampiran?
Bisa. Pakai parameter attachments di MailApp.sendEmail, isinya array file dari Google Drive. Kamu juga bisa bikin PDF dari sheet-nya sendiri dan lampirkan. Ukuran total lampiran maksimal 25 MB, sama kayak batas Gmail biasa.
Gimana cara mastiin email gak kekirim dua kali?
Pakai kolom status. Setelah skrip berhasil kirim ke satu baris, tulis tanggal di kolom itu. Di awal loop, skrip cek dulu kolom status — kalau udah terisi, lewati barisnya. Tanpa ini, tiap trigger jalan semua pelanggan dapat email yang sama lagi.
Perlu bayar buat pakai Apps Script?
Nggak. Apps Script gratis buat semua akun Google. Yang dibatasi cuma kuotanya: 100 email per hari, waktu eksekusi 6 menit per run. Buat kebutuhan UMKM kayak kirim 30 reminder tiap pagi, kuota gratis lebih dari cukup.
Langkah berikutnya
Yang paling penting dari tutorial ini: tes ke email sendiri dulu, dan jangan pernah lupa kolom status.
Kalau udah jalan, kamu bisa kembangin. Kirim cuma ke tagihan yang jatuh tempo 3 hari lagi. Tambahin lampiran PDF invoice. Kirim laporan mingguan ke tim.
Semua fungsi MailApp yang tersedia ada di dokumentasi resmi Google Apps Script.
Buat logika kondisi di dalam skrip, konsepnya sama kayak fungsi IF dan VLOOKUP yang udah kamu kenal. Dan kalau mau lihat cara otomatisasi spreadsheet yang lain, lanjut baca Checklist Data Cleaning buat mastiin data yang masuk ke skrip udah bersih.
Buka spreadsheet kamu sekarang. Lima belas menit, jadi.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel Terkait
Template Laporan Penjualan Excel: Struktur yang Dipakai Analis
Template laporan penjualan yang bener cuma butuh 3 sheet. Yang bikin laporan orang rusak biasanya karena data mentah dan hasil dicampur di satu tempat.
Cara Menghubungkan Google Sheets ke Looker Studio
Nyambungin Google Sheets ke Looker Studio cuma butuh 5 menit. Yang bikin lama itu datanya belum rapi. Ini urutan yang bener.
Cara Share Google Sheets dengan Aman: Permission & Protected Range
Panduan step by step share Google Sheets tanpa bikin rumus kehapus atau data gaji bocor — dari level permission, protected range, sampai audit siapa yang buka.