Indonesia | Inggris
Sebuah Cloudflare Email Worker serverless yang mengurai email masuk, menyimpannya di D1, mengirimkan ringkasan ke Discord melalui webhook, dan menyediakan dasbor web untuk melihat dan mengelola email yang diterima.
- Penguraian email: Mengurai MIME mentah dengan
postal-mimedan mengekstrak teks, tautan, serta lampiran dari body HTML menggunakancheerio. - Blocklist: Menolak email dari alamat tertentu atau pola domain (mendukung wildcard
*) sebelum diproses. - Penyimpanan D1: Menyimpan data email lengkap (pengirim, penerima, subjek, body teks, body HTML, MIME mentah) di database Cloudflare D1.
- Notifikasi Discord: Mengirimkan ringkasan
.txtyang mudah dibaca ke Discord webhook untuk setiap email yang diterima. - Dasbor web: Daftar email dengan paginasi dan pencarian, lengkap dengan tampilan detail, hapus satu email, dan hapus banyak email sekaligus (multi-select).
- Autentikasi Cloudflare Access: Dasbor dilindungi eksklusif oleh Cloudflare Access (JWT). Tidak ada metode autentikasi lain yang diterima.
Pada setiap email masuk:
- MIME mentah diurai; pengirim dicek terhadap blocklist — email yang diblokir akan di-reject dengan
setReject. - Body HTML dibersihkan dan tautan diekstrak.
- Email lengkap disimpan ke D1.
- Ringkasan
.txtdibuat dan diunggah ke Discord sebagai lampiran file.
| Variabel | Deskripsi |
|---|---|
DISCORD_WEBHOOK_URL |
URL Discord webhook untuk notifikasi email |
DASHBOARD_URL |
URL publik worker yang sudah di-deploy |
FALLBACK_EMAIL |
Alamat email penerima cadangan |
TEAM_DOMAIN |
Team domain Cloudflare Access (wajib) |
AUDIENCE_TAG |
Audience tag Cloudflare Access (wajib) |
TEAM_DOMAINdanAUDIENCE_TAGkeduanya wajib diisi. Dasbor mengembalikan503jika salah satunya tidak dikonfigurasi.
// Blokir alamat spesifik
export const BLOCKED_EMAILS: string[] = ['[email protected]'];
// Blokir domain/pola (* adalah wildcard)
export const BLOCK_PATTERNS: string[] = [
'spam.com',
'*.spam.com',
];Dasbor tersedia di / dan memerlukan autentikasi. Fitur yang tersedia:
- Daftar email dengan paginasi dan pencarian server-side (berdasarkan subjek atau pengirim)
- Tampilan detail per email dengan rendering HTML yang sudah disanitasi
- Pilih beberapa email sekaligus dengan checkbox dan hapus dalam satu aksi (bulk delete)
- Hapus email individual dari daftar maupun tampilan detail
pnpm dev # Dev lokal via wrangler
pnpm deploy # Deploy ke Cloudflare
pnpm deploy-min # Deploy dengan minifikasi
pnpm cf-typegen # Generate tipe binding Cloudflare