← Back to all posts
2026-09-06 · MailAnvil Team

Verifikasi Domain & DKIM untuk Email Transaksional — Setup SPF, DKIM, DMARC dari Nol

Email OTP kamu masuk spam? Invoice tidak sampai? Masalahnya hampir selalu sama: kamu kirim dari domain yang belum terverifikasi, atau record DKIM/SPF/DMARC belum terpasang.

MailAnvil menolak kirim dari domain yang dkim_status-nya belum verified — ini sengaja, untuk melindungi reputasi pengirim. Tutorial ini memandu dari nol sampai email pertama pakai domain sendiri.

Kenapa verifikasi domain itu wajib

Provider email (Gmail, Outlook) menilai setiap email dari tiga tanda tangan DNS:

Tanpa ketiganya, email kamu terlihat seperti spoof. Dengan ketiganya, Gmail percaya email kamu asli — masuk Inbox, bukan spam.

Prasyarat

Step 1 — Tambah domain

POST /v1/domains memicu SES membuat email identity, lalu mengembalikan semua record DNS yang harus kamu pasang.

curl -X POST https://api.mailanvil.com/v1/domains \
  -H "Authorization: Bearer re_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"domain": "mail.contoh.com"}'

Respons 201 berisi domain (dengan dkim_status: "pending") plus dns_records:

{
  "domain": { "id": "dom_01j2x...", "domain": "mail.contoh.com", "dkim_status": "pending" },
  "dns_records": [
    { "type": "CNAME", "name": "<token1>._domainkey.mail.contoh.com", "value": "<token1>.dkim.amazonses.com", "purpose": "DKIM" },
    { "type": "CNAME", "name": "<token2>._domainkey.mail.contoh.com", "value": "<token2>.dkim.amazonses.com", "purpose": "DKIM" },
    { "type": "CNAME", "name": "<token3>._domainkey.mail.contoh.com", "value": "<token3>.dkim.amazonses.com", "purpose": "DKIM" },
    { "type": "TXT", "name": "mail.contoh.com", "value": "v=spf1 include:amazonses.com ~all", "purpose": "SPF" },
    { "type": "MX", "name": "send.mail.contoh.com", "value": "feedback-smtp.ap-southeast-1.amazonses.com", "priority": 10, "purpose": "MAIL FROM" },
    { "type": "TXT", "name": "send.mail.contoh.com", "value": "v=spf1 include:amazonses.com ~all", "purpose": "MAIL FROM" },
    { "type": "TXT", "name": "_dmarc.mail.contoh.com", "value": "v=DMARC1; p=none; rua=mailto:[email protected]", "purpose": "DMARC (recommended)" }
  ]
}

Simpan dom_... — itu id yang dipakai untuk verifikasi nanti.

Step 2 — Pasang record DNS

Dua cara. Pilih salah satu.

Cara A — Auto-configure Cloudflare (paling cepat)

Kalau domain kamu di Cloudflare, MailAnvil bisa pasang semua record otomatis. Pertama hubungkan token Cloudflare (token dienkripsi saat disimpan, tidak pernah disimpan plaintext):

# 1. Hubungkan Cloudflare token (butuh izin DNS:Edit di zone)
curl -X POST https://api.mailanvil.com/v1/cloudflare/connect \
  -H "Authorization: Bearer re_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"api_token": "CF_TOKEN_ANDA"}'

# 2. Auto-pasang semua record DKIM/SPF/DMARC
curl -X POST https://api.mailanvil.com/v1/domains/dom_01j2x.../cloudflare-auto-configure \
  -H "Authorization: Bearer re_your_api_key"

Respons kedua:

{ "success": true, "zone": "contoh.com", "records_created": 7 }

Selesai — tidak perlu copas record manual.

Cara B — Pasang manual

Buka panel DNS provider kamu, tambahkan setiap dns_records persis seperti di atas. Catatan penting:

Step 3 — Verifikasi

Setelah record terpasang (tunggu 1-5 menit propagasi), panggil verifikasi ulang:

curl -X POST https://api.mailanvil.com/v1/domains/dom_01j2x.../verify \
  -H "Authorization: Bearer re_your_api_key"

MailAnvil mengecek ulang SES identity, lalu memeriksa SPF dan DMARC lewat lookup DNS live. Respons:

{
  "domain": {
    "dkim_status": "verified",
    "spf_status": "verified",
    "dmarc_status": "verified"
  }
}

Saat dkim_status jadi verified, kamu resmi boleh kirim dari domain itu. Kalau masih pending, cek typo nilai record — penyebab paling umum.

Step 4 — Kirim email pertama

await fetch("https://api.mailanvil.com/v1/send", {
  method: "POST",
  headers: {
    "Authorization": "Bearer re_your_api_key",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    from: "MailAnvil <[email protected]>",
    to: ["[email protected]"],
    subject: "Konfirmasi pemesanan #1234",
    html: "<h1>Pesanan dikonfirmasi</h1><p>Terima kasih sudah memesan.</p>"
  })
});

Respons 202 Accepted — email masuk antrian, ditandatangani DKIM dari domain terverifikasi kamu.

Pola pakai di dunia nyata

Satu domain bisa dipakai semua service — verifikasi sekali, kirim dari mana saja.

Kenapa MailAnvil

Next steps

Tambah domain produksi kamu, pasang record (auto-configure kalau di Cloudflare), verifikasi, lalu pindahkan semua from dari domain default ke domain sendiri. Referensi lengkap di docs.mailanvil.com.

Domain terverifikasi = email masuk Inbox. Auto-configure Cloudflare = 1 request, bukan 7 record manual.

Coba MailAnvil gratis di mailanvil.com — 500 email/bulan gratis, bayar pakai QRIS/GoPay.