Kirim Email Massal dengan Python Tanpa Langsung Masuk Folder Spam
Oleh Anang H. Darmawan

Foto: Mariia Berezovsky / Unsplash
Script Python untuk kirim email massal bisa ditulis dalam 20 baris dengan smtplib. Masalahnya, email yang terkirim belum tentu masuk inbox. Kasus yang sering saya temui: script jalan mulus, semua status sukses, lalu penerima bilang emailnya ada di folder spam, atau akun pengirim mendadak dibatasi setelah beberapa ratus email.
Kenapa email massal gampang ditandai spam
Penyedia email seperti Gmail dan Outlook menilai dua hal: siapa pengirimnya dan bagaimana pola kirimnya. Akun yang biasanya mengirim 10 email sehari lalu tiba-tiba mengirim 800 dalam lima menit terlihat seperti akun yang dibajak. Isi yang identik persis ke ratusan alamat, tanpa nama penerima, juga cocok dengan pola spam.
Artinya perbaikan harus dilakukan di dua sisi, yaitu identitas domain pengirim dan perilaku script.
SPF, DKIM, dan DMARC dalam bahasa sederhana
Ketiganya adalah catatan DNS di domain pengirim. SPF menyebutkan server mana saja yang boleh mengirim email atas nama domainmu. DKIM menambahkan tanda tangan digital di setiap email, sehingga penerima bisa memastikan isinya tidak diubah di jalan dan benar berasal dari domainmu. DMARC memberi tahu penerima apa yang harus dilakukan kalau pemeriksaan SPF atau DKIM gagal, misalnya dikarantina ke spam atau ditolak, dan ke mana laporannya dikirim.
Kalau kamu mengirim dari alamat @gmail.com lewat SMTP Gmail, urusan ini sudah ditangani Google. Kalau memakai domain sendiri, misalnya info@tokomu.com, kamu harus mengaturnya di DNS sesuai petunjuk penyedia email atau layanan SMTP yang dipakai. Sejak 2024, Google dan Yahoo memberlakukan aturan lebih ketat untuk pengirim massal, termasuk autentikasi domain dan cara berhenti berlangganan yang mudah. Baca panduan pengirim massal di dokumentasi resmi mereka untuk detail angka dan syaratnya.
Setelah DNS diatur, kirim satu email ke alamat Gmail milikmu, buka menu Show original, lalu cek apakah SPF, DKIM, dan DMARC berstatus PASS.
Throttle: beri jeda antar-email
Di sisi script, aturan paling penting adalah jangan mengirim secepat loop bisa berputar. Tambahkan jeda di antara email, dan buat jedanya sedikit acak, misalnya 3 sampai 8 detik dengan time.sleep(random.uniform(3, 8)). Pola kirim yang terlalu teratur juga terlihat seperti mesin.
Kirim per batch. Setelah 50 email, istirahatkan script beberapa menit. Buka satu koneksi SMTP per batch dan tutup setelahnya, jangan membuka koneksi baru untuk setiap email. Catat setiap alamat yang sudah terkirim ke file log, supaya kalau script berhenti di tengah, kamu bisa melanjutkan tanpa mengirim dobel.
Soal batas kirim, tiap penyedia punya angka sendiri, dan angkanya berbeda untuk akun gratis dan akun berbayar. Gmail dan Google Workspace mencantumkan batas harian di halaman bantuan resminya. Cek angka itu sebelum merencanakan kampanye. Kalau daftar kontakmu jauh di atasnya, pakai layanan email transaksional atau newsletter khusus, jangan akun SMTP pribadi.
Personalisasi template
Email dengan sapaan "Halo Budi" dan isi yang menyebut hal spesifik penerima, misalnya nomor pesanan, nama kelas, atau tanggal acara, jauh lebih jarang ditandai spam daripada email yang identik. Di Python, simpan daftar kontak di CSV dengan kolom nama, email, dan field lain, lalu isi template dengan string.Template atau Jinja2.
Kirim versi teks biasa di samping versi HTML (multipart/alternative) lewat EmailMessage, dengan set_content untuk teks lalu add_alternative untuk HTML. Hindari subjek huruf kapital semua, tanda seru berderet, dan email yang isinya cuma satu gambar besar. Sertakan cara berhenti berlangganan yang jelas, dan hapus alamat yang memantul (bounce) dari daftar.
Pakai yang sudah jadi
Email massal + template + throttle adalah script Python yang mengirim email dengan template ke daftar penerima sambil mengatur jeda antar-email, sehingga volume kirim tetap terlihat wajar. Source code-nya bebas dimodifikasi dan disertai contoh penggunaan, harganya Rp200.000. Pengaturan SPF, DKIM, dan DMARC domain tetap perlu kamu lakukan sendiri di DNS.
Kalau email yang kamu kirim rutin berisi laporan bulanan, Report generator CSV, Excel + chart menyusun data mentah jadi laporan rapi lengkap dengan grafik (Rp200.000). Hasilnya tinggal kamu lampirkan di email tadi.
Mulai dengan uji kecil: kirim ke lima alamat milikmu sendiri di Gmail, Outlook, dan Yahoo. Cek apakah masuk inbox atau spam, periksa header-nya, baru naikkan ke daftar sungguhan secara bertahap.
