Mengirim email dengan attachment bukan sekadar menambahkan file ke SMTP request. Size limit per provider berbeda-beda, MIME type yang salah bisa menyebabkan email ditolak atau masuk spam, dan file executable hampir selalu diblokir. Artikel ini menjelaskan batasan teknis, risk security, dan strategi praktis untuk implementasi attachment di sistem transaksional.
Anda sudah berhasil mengirim email OTP, notifikasi order, dan reset password. Traffic berjalan lancar. Lalu ada request baru dari tim produk: kirim invoice dalam format PDF setelah pembayaran berhasil.
Bukannya sulit secara teknis. Library SMTP di Laravel, Node.js, atau Python sudah punya fungsi attachment. Dua baris kode, selesai.
Tapi mengapa invoice PDF tidak sampai ke inbox customer? Kenapa kadang bounce, kadang masuk spam, kadang tidak ada error sama sekali?
Masalahnya bukan di kodenya. Masalahnya ada di batasan yang tidak terlihat dari sisi aplikasi: size limit per provider, MIME type yang tidak sesuai, dan filter security yang memblokir file tertentu sebelum email sampai ke penerima.
Daftar Isi
Apa yang Terjadi Saat Email dengan Attachment Dikirim?
Saat Anda menambahkan attachment ke email, proses yang terjadi lebih kompleks dari sekadar mengirim teks.
Email di-encode menjadi format MIME multipart. Setiap bagian email: header, body teks, dan setiap attachment dipisah dengan boundary dan diberi Content-Type serta Content-Disposition. File yang tadinya PDF 2 MB di server Anda, sekarang menjadi bagian dari email yang ukurannya lebih besar dari file aslinya karena base64 encoding menambah sekitar 33% ukuran file.
Email provider penerima melakukan beberapa kali pengecekan sebelum menerima email dengan attachment:
Size check. Gmail menolak email yang total ukurannya lebih dari 25 MB untuk akun personal dan 50 MB untuk Google Workspace. Outlook menolak di angka 34 MB. Yahoo di 25 MB. Kalau ukuran email melebihi batas ini, email langsung dibouncing dengan pesan error yang jelas.
MIME type check. Setiap attachment punya Content-Type header. File PDF harusnya punya Content-Type application/pdf. Kalau header ini salah atau tidak sesuai dengan isi file, filter spam bisa menandai email sebagai mencurigakan.
File type check. File executable seperti .exe, .bat, .cmd, .com, .scr, dan beberapa ekstensi lain hampir selalu diblokir otomatis oleh Gmail, Outlook, dan Yahoo. File macro seperti .docm (Word dengan macro) atau .xlsm (Excel dengan macro) juga sering diblokir karena potensi malware.
Content scanning. Attachment di-scan oleh anti-virus di server penerima. File yang mengandung signature malware akan diblokir. File yang di-password-protect zip kadang juga diblokir karena anti-virus tidak bisa meng-scan isinya.
Size Limit per Email Provider: Angka yang Perlu Dihafal
Setiap provider punya batasan berbeda. Angka ini bukan saran, tapi hard limit yang akan menyebabkan email bouncing kalau dilanggar.
Gmail: 25 MB (personal) / 50 MB (Workspace). Ukuran ini termasuk total email: header, body, dan semua attachment. File PDF 2 MB akan menjadi sekitar 2.7 MB setelah di-base64 encode. Kalau Anda kirim 10 file PDF 2 MB, total sudah 27 MB, melebihi batas Gmail personal.
Outlook.com: 34 MB. Limit sedikit lebih tinggi dari Gmail tapi masih dalam range yang sama. Outlook juga lebih ketat dengan file macro dan executable.
Yahoo Mail: 25 MB. Sama dengan Gmail personal. Yahoo juga limit opsi untuk forwarding attachment besar.
Provider SMTP transaksional. Provider seperti KIRIM.EMAIL Dev, SendGrid, atau Mailgun biasanya punya limit sendiri yang berbeda dengan limit inbox provider. Pahami dulu dasar SMTP sebelum memilih provider agar kebutuhan aplikasi Anda terpenuhi. Pastikan Anda cek dokumentasi provider yang digunakan.
MIME Type: Kenapa File PDF Sering Bermasalah
MIME type adalah header yang memberitahu email client jenis file apa yang dikirim. Header ini penting karena email client memutuskan bagaimana menampilkan atau menyimpan attachment berdasarkan MIME type.
Permasalahan yang sering terjadi:
MIME type tidak sesuai dengan isi file. File dengan ekstensi .pdf tapi Content-Type image/jpeg akan ditandai mencurigakan oleh filter spam. Ini sering terjadi kalau developer secara manual set Content-Type tanpa memverifikasi isi file.
MIME type missing. Beberapa SMTP library tidak otomatis mengisi Content-Type untuk file tertentu. Email dengan attachment tanpa MIME type yang benar lebih mudah masuk spam.
Client-side validation tidak cukup. Validasi ekstensi file di frontend tidak menjamin file yang dikirim benar-benar berjenis tersebut. File dengan ekstensi .pdf bisa saja berisi executable yang malicious. Validasi MIME type harus dilakukan di server-side dengan membaca file signature atau magic bytes.
File yang Diblokir Otomatis oleh Provider
Kalau Anda mencoba mengirim file dengan ekstensi berikut, email hampir pasti akan ditolak atau attachment di-strip:
- File executable: .exe, .bat, .cmd, .com, .scr, .pif
- File script: .js, .vbs, .jse, .wsf
- File macro: .docm, .xlsm, .pptm, .xlm
- File compressed dengan password: .zip (ter-proteksi password), .7z (encrypted)
- File disk: .iso, .img
File-file ini diblokir bukan karena membahayakan email client, tapi karena historically file jenis ini adalah vektor utama distribusi malware.
Kalau sistem Anda perlu mengirim file jenis ini, satu-satunya solusi aman adalah menyimpan file di cloud storage dan mengirim link download via email, bukan attachment langsung.
Inline Attachment vs Regular Attachment: Perbedaan yang Penting
Ada dua cara menyisipkan file ke email:
Regular attachment. File muncul sebagai attachment terpisah di email client. Penerima harus download file untuk membukanya. Cocok untuk dokumen seperti invoice, report, atau file yang perlu disimpan.
Inline attachment. File ditampilkan langsung di dalam body email. Cocok untuk gambar yang ingin muncul di email HTML. Membutuhkan Content-Disposition: inline dan Content-ID header yang direferensikan di tag img src menggunakan format cid:content-id.
Pilihan inline atau regular attachment mempengaruhi:
- Filtering spam. Inline image kurang mencurigakan dibanding regular attachment untuk konten tertentu.
- User experience. Gambar logo atau header email sebaiknya inline agar langsung terlihat.
- Size calculation. Inline attachment tetap dihitung dalam total size limit.
Security Risk yang Sering Diabaikan Developer
Filename injection. Nama file yang dikirim user bisa mengandung karakter berbahaya. File dengan nama ../../etc/passwd.pdf bisa potensial menyebabkan path traversal kalau nama file tidak disanitasi sebelum disimpan di server.
MIME type spoofing. Attacker bisa mengirim file malicious dengan ekstensi .jpg atau .pdf padahal isinya executable. Server-side validation dengan membaca magic bytes atau file signature lebih reliable daripada mempercayai ekstensi file.
Zip bomb. File zip yang ukurannya kecil (misalnya 1 MB) tapi mengandung file yang ketika di-extract menjadi sangat besar (misalnya 1 TB). Kalau file ini di-extract di server, bisa menyebabkan denial of service.
Unsanitized filename in email client. Beberapa email client menampilkan nama file tanpa escape karakter special. Karakter seperti < atau > dalam nama file bisa memicu XSS di email client tertentu.
Strategi Ketika Attachment Terlalu Besar
Kalau file yang perlu dikirim melebihi size limit, ada beberapa opsi:
Upload ke cloud storage, kirim link. Simpan file di S3, Google Cloud Storage, atau storage lain. Kirim link download via email dengan waktu expired. Ini adalah pendekatan yang paling scalable untuk file besar.
Kirim partial attachment. Untuk file seperti report yang sangat besar, pertimbangkan untuk kirim ringkasan dalam email dengan link untuk download full report.
Gunakan CDN dengan signed URL. File disimpan di CDN dengan URL yang expired setelah waktu tertentu. Lebih aman dari storage langsung karena URL tidak bisa diakses permanen.
Implementasi di Aplikasi Web: Checklist Praktis
Sebelum memulai implementasi, checklist ini membantu menghindari masalah umum:
- Validasi ukuran file di server-side sebelum menambahkan ke email. Jangan percaya validasi frontend saja.
- Verifikasi MIME type dengan membaca file signature atau magic bytes, bukan hanya ekstensi file.
- Sanitasi nama file: hapus karakter special, batasi panjang, dan gunakan ekstensi yang sesuai.
- Cek apakah file type termasuk yang diblokir oleh provider. Kalau ya, gunakan alternatif download link.
- Gunakan library SMTP yang sudah mature yang menangani MIME multipart secara otomatis. Implementasi manual rentan error.
- Test dengan beberapa provider: Gmail, Outlook, Yahoo untuk memastikan attachment diterima dengan baik.
- Monitor bounce rate untuk email dengan attachment. Lonjakan bounce bisa mengindikasikan masalah MIME type atau filtering.
Email dengan attachment yang sering bounce juga bisa disebabkan oleh reputasi domain atau IP yang buruk, bukan hanya masalah ukuran file.
Kalau Anda mencari solusi SMTP yang menangani email dengan attachment secara reliable, KIRIM.EMAIL Dev menyediakan infrastruktur dengan reputasi IP yang terjaga dan tracking real-time sehingga Anda bisa memahami kenapa email dengan attachment tidak terkirim, apakah masalah size, MIME type, atau filtering yang menyebabkan email masuk spam.
FAQ
Berapa ukuran maksimal file yang bisa dikirim via email?
Tergantung provider. Gmail personal 25 MB, Google Workspace 50 MB, Outlook 34 MB, Yahoo 25 MB. Ingat bahwa base64 encoding menambah sekitar 33% ukuran file. File 10 MB di disk akan menjadi sekitar 13.3 MB saat di-attach ke email.
Kenapa email dengan attachment sering masuk spam?
Ada beberapa sebab: MIME type yang tidak sesuai dengan isi file, nama file yang mencurigakan, file type yang diblokir, atau reputasi domain/IP yang buruk. Attachment juga meningkatkan spam score karena banyak phishing yang menggunakan attachment malicious.
Apa perbedaan inline dan regular attachment?
Inline attachment ditampilkan langsung di dalam body email, cocok untuk gambar. Regular attachment muncul sebagai file terpisah yang perlu di-download. Keduanya tetap dihitang dalam size limit.
Bagaimana cara mengirim file large lebih dari 25 MB?
Gunakan download link. Upload file ke cloud storage, kirim link dengan waktu expired via email. Ini lebih reliable daripada mencoba mengirim file besar langsung.
File type apa saja yang diblokir oleh email provider?
File executable (.exe, .bat, .cmd), script (.js, .vbs), file macro (.docm, .xlsm), dan file compressed yang di-password. Daftar lengkap berbeda-beda per provider.
Apakah attachment mempengaruhi deliverability email transaksional?
Ya. Email dengan attachment memiliki spam score lebih tinggi dibanding email plain text. MIME type yang salah atau file mencurigakan bisa menyebabkan email ditolak atau masuk spam. Pastikan validasi file dilakukan dengan benar sebelum mengirim.
Hasbi Putra adalah Head of Marketing di KIRIM.EMAIL, email delivery infrastructure untuk developer dan tim IT di Indonesia. KIRIM.EMAIL mengirim lebih dari 11 juta email per hari dengan server yang sepenuhnya berlokasi di Indonesia.
- Cara Implementasi Email Priority Queue dan Throttling Queue untuk Sistem Transaksional High-Volume - April 21, 2026
- Cara Kirim Email dengan Attachment di Aplikasi Web: Size Limit, MIME Type, dan Security Best Practice - April 20, 2026
- Cara Konfigurasi Mail Driver di Laravel untuk Email Transaksional Production - April 19, 2026
