Dalam tutorial ini, Anda akan membangun MailKit, sebuah platform email transaksional di mana pelanggan membayar di muka untuk sejumlah kredit email. Rencana ini memberikan alokasi email bulanan; ketika pelanggan kekurangan, mereka dapat membeli paket top-up alih-alih menunggu siklus berikutnya. Setiap pengiriman secara otomatis mengurangi satu kredit.Documentation Index
Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
Use this file to discover all available pages before exploring further.
resend.emails.send dengan SendGrid, Postmark, SES, atau SMTP relay Anda sendiri.- Membuat hak kredit kustom (email) di dashboard Anda
- Menambahkan kredit ke rencana berlangganan dan produk top-up satu kali
- Mengirim email nyata melalui Resend dan mendebit satu kredit per pengiriman melalui entri buku besar
- Menanyakan saldo kredit langsung dari frontend Anda
- Memverifikasi webhook Dodo dengan benar dan menangani
credit.balance_lowuntuk mengingatkan pelanggan sebelum mereka mencapai nol
Apa yang Kami Bangun
Berikut adalah model harga untuk MailKit:| Produk | Harga | |
|---|---|---|
| Rencana MailKit | $19/bulan | 5.000 email/siklus |
| Paket Top-Up | $9 satu kali | +5.000 email |
- Akun Dodo Payments (mode uji tidak apa-apa)
- Akun gratis Resend dan kunci API
- Node.js 18+ dan pemahaman dasar TypeScript
Langkah 1: Buat Hak Kredit Email Anda
Hak kredit mendefinisikan unit yang dijual platform Anda: dalam hal ini, satu pengiriman email.
Open the Credits section
- Masuk ke dashboard Dodo Payments Anda
- Klik Produk di sidebar kiri
- Pilih tab Kredit
- Klik Buat Kredit
Configure the credit unit
Email CreditsJenis Kredit: Pilih Unit KustomNama Unit: emailPresisi: 0 (email selalu merupakan unit utuh; Anda tidak dapat mengirim setengah email)Kedaluwarsa Kredit: 30 days (alokasi siklus setiap kali direset)Leave the other defaults as-is
Langkah 2: Buat Paket dan Paket Top-Up
Anda akan membuat dua produk: rencana Berlangganan berulang dan top-up Pembayaran Tunggal. Rencana ini memberikan 5.000 email setiap siklus; top-up menambahkan 5.000 lainnya sesuai permintaan. Kedua produk menambahkan hakEmail Credits yang sama.
Rencana MailKit ($19/bulan, 5.000 email)
Create the subscription
- Pergi ke Produk → Buat Produk
- Isi detail produk:
MailKit PlanDeskripsi: 5,000 transactional emails per month.- Pilih Berlangganan sebagai jenis produk
- Tetapkan harga berulang:
19.00Siklus Penagihan: MonthlyMata Uang: USDAttach the email credit entitlement
Email CreditsKredit yang diterbitkan per siklus penagihan: 5000Ambang Batas Saldo Rendah: 20 (persen; memicu credit.balance_low ketika saldo turun di bawah 20% dari alokasi siklus, yaitu 1.000 email)Impor Pengaturan Kredit Default: diaktifkan (menggunakan kedaluwarsa 30 hari dari Langkah 1)Klik Tambahkan ke Produk, lalu Simpan produk tersebut. Salin ID produk (pdt_xxxxxxxxxxxx).Paket Top-Up ($9 satu kali, 5.000 email)
Create a one-time product
- Pergi ke Produk → Buat Produk
- Isi detail produk:
Email Top-Up PackDeskripsi: Add 5,000 emails to your MailKit balance instantly.- Pilih Pembayaran Tunggal sebagai jenis produk
- Tetapkan harga:
9.00Mata Uang: USDAttach the credit grant
- Hak Kredit:
Email Credits - Kredit yang diterbitkan:
5000
Langkah 3: Siapkan Backend
Sekarang bangun server Express yang menangani checkout, pengiriman, kueri saldo, dan webhook.Configure environment variables
.env:DODO_WEBHOOK_KEY di Langkah 4 setelah membuat endpoint. Kunci API Resend berasal dari resend.com/api-keys.Build the server
server.ts di root proyek:Langkah 4: Sambungkan Endpoint Webhook
Acaracredit.balance_low adalah yang memungkinkan Anda mengingatkan pelanggan sebelum mereka kehabisan. Tanpanya, pertama kali mereka menyadari masalah adalah ketika email gagal dikirim.
Expose your local server
https://1234abcd.ngrok-free.app).Register the endpoint in Dodo
- Pergi ke Pengembang → Webhook → Tambah Endpoint
- URL:
https://1234abcd.ngrok-free.app/webhooks/dodo - Acara: berlangganan ke
credit.added,credit.balance_low, dancredit.rolled_over - Simpan, lalu salin kunci tanda tangan ke
.envAnda sebagaiDODO_WEBHOOK_KEY - Nyalakan ulang server Anda
Langkah 5: Uji Alur Lengkap
Start the server
MailKit running on http://localhost:3000. Buka di browser Anda.Subscribe a test customer
- Di bagian 1, masukkan email dan nama uji, klik Dapatkan tautan checkout
- Buka tautan tersebut, lengkapilah checkout dengan kartu ujian
- Setelah pembayaran, temukan
customer_iddi dashboard Anda di bawah Pelanggan
Send a real email
- Tempel
customer_iddi bagian 3 - Biarkan
todisetel kedelivered@resend.dev(kotak masuk sandbox Resend yang menerima semuanya) - Klik Kirim
Trigger the low-balance webhook
- Pergi ke Pelanggan → [Pelanggan] → Kredit → Kredit Email
- Klik Sesuaikan Saldo dan debit
4000 - Kirim satu email lagi melalui demo
Buy a top-up pack
- Tempel
customer_iddi bagian 4 - Klik Beli 5.000 email, dan selesaikan checkout uji
- Segarkan saldo, dan saldo akan melonjak sebesar 5.000
credit.added ditandai dengan grant_source: one_time. Top-up ditumpuk di atas kredit berlangganan; kedua kolam tersebut diambil FIFO (hibah non-kedaluwarsa tertua terlebih dahulu).Pemecahan Masalah
Webhook signature verification fails (401)
Webhook signature verification fails (401)
express.json() mengurai dan men-serial ulang payload, yang merusak HMAC. Pastikan /webhooks/dodo terdaftar dengan express.raw({ type: 'application/json' }) di atas baris app.use(express.json()), dan bahwa DODO_WEBHOOK_KEY sesuai dengan kunci tanda tangan yang ditampilkan di halaman detail endpoint.Balance is 0, customer not found, or credits don't deduct
Balance is 0, customer not found, or credits don't deduct
- Pelanggan menyelesaikan checkout (kredit dikeluarkan setelah pembayaran berhasil, bukan saat pembuatan sesi)
CREDIT_ENTITLEMENT_IDdalam.envsesuai dengan kredit yang dilampirkan ke produk (ID tidak sesuai secara sunyi menuliskan ke kredit yang salah)customer_idyang Anda lewati berasal dari Dodo (tabelcustomersdi dashboard), bukan database Anda sendiri
Resend rejects the recipient
Resend rejects the recipient
onboarding@resend.dev hanya mengirim ke email di akun Resend Anda atau ke delivered@resend.dev. Untuk mengirim ke orang lain, verifikasi domain dan gunakan alamat from di dalamnya.Apa yang Anda Bangun
One reusable credit unit
Email Credits, didefinisikan sekali dan dilampirkan ke rencana berlangganan dan paket top-up.Subscription with prepaid allowance
Top-up pack
Instant ledger debits
createLedgerEntry setelah setiap pengiriman. Tidak ada meter, tidak ada penundaan agregasi, idempoten pada pengulangan melalui id pesan Resend.