← Back to all posts
2026-08-05 · MailAnvil Team

5 Kesalahan Fatal Developer Indonesia Saat Mengirim Email Transaksional

Mengirim email transaksional kedengarannya simpel: panggil API, email terkirim, selesai. Tapi di dunia nyata, developer Indonesia sering jatuh ke lubang yang sama — email nyangkut di spam, notifikasi OTP tidak sampai, atau yang lebih parah: domain kena blacklist tanpa sadar.

Setelah berbicara dengan puluhan developer startup Indonesia — dari fintech yang kirim OTP verifikasi, travel booking yang kirim e-tiket, sampai food delivery yang kirim invoice — ini lima kesalahan paling fatal yang kami temukan.

1. Hardcode SMTP Gmail untuk Production

Ini yang paling sering kami lihat. Developer pakai smtp.gmail.com dengan App Password untuk kirim notifikasi production.

Masalahnya: Gmail punya limit 500 email/hari untuk akun gratis, dan 2.000/hari untuk Google Workspace. Startup fintech yang kirim OTP ke 5.000 user dalam sehari? Semua email setelah limit ke-500 otomatis gagal — tanpa notifikasi yang jelas ke developer.

Cara benar: Gunakan API email transaksional yang didesain untuk production. MailAnvil, Resend, SendGrid — pilih yang mendukung volume harian sesuai kebutuhan. MailAnvil punya tier gratis 500/bulan untuk testing, dan Starter 10.000/bulan cukup untuk MVP.

// ❌ Jangan ini untuk production
const transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: { user: '[email protected]', pass: 'app-password' }
});

// ✅ Gunakan API email transaksional
const response = await fetch('https://api.mailanvil.com/v1/send', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    from: '[email protected]',
    to: ['[email protected]'],
    subject: 'Kode OTP Kamu',
    html: '<p>Kode OTP: <strong>123456</strong></p>'
  })
});

2. Tidak Setup DKIM dan SPF

Banyak developer Indonesia mengabaikan DNS records untuk email. Akibatnya: email dari domain mereka dianggap spoofing oleh Gmail dan Yahoo. Hasil akhir? Masuk spam — atau ditolak mentah-mentah.

DKIM (DomainKeys Identified Mail) dan SPF (Sender Policy Framework) adalah dua record TXT yang memberitahu mail server: "Iya, email ini benar-benar dari kami, bukan impersonator."

Tanpa DKIM, email OTP dari [email protected] bisa dianggap phishing oleh Gmail.

Cara benar: Setup DKIM dan SPF sebelum kirim email production pertama. Di MailAnvil, setiap domain yang didaftarkan otomatis diberikan DNS records lengkap — tinggal copy-paste ke Cloudflare DNS dashboard. Verifikasi otomatis dalam hitungan detik.

3. Mengabaikan Bounce Handling

Email bounce itu seperti surat balasan "alamat tidak ditemukan." Kalau kamu terus kirim ke alamat yang bounce, ESP (Email Service Provider) akan menandai domain kamu sebagai spammer.

Kesalahan klasik: developer anggap "email sudah terkirim" = "email sudah sampai." Padahal status 202 Accepted dari API hanya berarti email masuk antrian, bukan sampai ke inbox.

Cara benar: Monitor bounce rate. MailAnvil otomatis tracking delivery status per penerima — kamu bisa lihat di dashboard siapa yang bounce, complaint, atau delivered. Kalau bounce rate >5%, sistem otomatis pause pengiriman (kill switch) untuk melindungi reputasi domain kamu.

4. Tidak Ada Rate Limiting di Aplikasi Sendiri

Kamu sudah setup rate limiting di API — tapi bagaimana dengan aplikasi kamu sendiri?

Kasus nyata: startup travel booking Indonesia kirim email konfirmasi ke 20.000 user dalam satu jam karena bug di cron job. Akibatnya: domain kena throttle oleh ESP, email berikutnya delay berjam-jam.

Cara benar: Implementasikan queue di sisi aplikasi. Jangan kirim email langsung di request handler Express.js/Next.js — gunakan background job. MailAnvil pakai Cloudflare Queues di backend untuk auto-retry dan backpressure, tapi aplikasi kamu juga perlu pacing sendiri.

// ❌ Kirim langsung di route handler
app.post('/api/book', async (req, res) => {
  await sendConfirmationEmail(req.body.email); // blocking!
  res.json({ success: true });
});

// ✅ Kirim via queue / background job
app.post('/api/book', async (req, res) => {
  await emailQueue.add('send-confirmation', { email: req.body.email });
  res.json({ success: true }); // langsung return
});

5. Pakai Provider Internasional Tanpa Hitung Biaya Forex

Developer Indonesia sering langsung pilih SendGrid atau Resend karena "sudah terkenal." Tapi ada yang terlupa: biaya forex dan payment method.

SendGrid Essentials: $19.95/bulan untuk 50.000 email. Kedengarannya murah? Tambahkan spread kurs bank + biaya kartu kredit internasional (bisa 3-5%). Untuk startup bootstrap, tiap rupiah berarti.

Ditambah lagi: tidak menerima QRIS, GoPay, atau transfer bank lokal. Harus kartu kredit atau PayPal — yang tidak semua founder Indonesia punya.

Cara benar: Bandingkan total cost of ownership, bukan cuma harga nominal. MailAnvil Starter: Rp 149.000/bulan untuk 10.000 email — dibayar pakai QRIS atau GoPay. Tidak ada biaya forex, tidak perlu kartu kredit internasional. Untuk 100.000 email, MailAnvil Growth Rp 599.000/bulan vs SendGrid Essentials ~$35 (Rp 560.000+) — tapi MailAnvil sudah termasuk dokumentasi Bahasa Indonesia, support lokal, dan MCP-native untuk AI agents.


Tabel Perbandingan Cepat

Fitur SMTP Gmail SendGrid MailAnvil
Harga 10K email/bulan "Gratis" (limit 500/hr) ~Rp 320rb Rp 149rb
Pembayaran QRIS/GoPay
Dokumentasi Bahasa EN EN ID + EN
DKIM auto-setup Manual Semi ✅ (CF DNS auto)
Bounce tracking
MCP-native (AI agent)

Intinya: Email transaksional bukan cuma soal "bisa kirim." Ini soal deliverability, reputasi domain, dan total biaya — termasuk biaya waktu debugging saat email tidak sampai. Lima kesalahan di atas semuanya bisa dihindari dengan setup yang benar dari awal.

Coba MailAnvil gratis: mailanvil.com — 500 email/bulan gratis, setup 5 menit, dibayar pakai QRIS.