Skip to content

Alur Pengiriman Email

Poin kunci

Backend ATE tidak mengirim email transaksional pelanggan secara langsung. Ia hanya melakukan provisioning (membuat relay account Zimbra, mendaftarkan domain ke ZoneMTA, menerbitkan API token). Pengiriman aktual dilakukan oleh ZoneMTA dan/atau Zimbra.

Dua jalur pengiriman pelanggan

JalurCaraUntuk siapa
SMTP relayMail server pelanggan (Zimbra) relay via relay.aktiva.co.id:587Pelanggan dengan mail server sendiri
HTTP APIPOST ke ZMTA_SEND_EMAIL_ENDPOINT dengan Authorization: Bearer <token>Pengiriman programatik

Onboarding sampai bisa mengirim (end-to-end)

Langkah detail

  1. Checkout (POST /api/v1/billings/checkout) — bila domain diberikan:

    • Buat relay account Zimbra (relay.{domain}@infokreasindo.net, status awal closed).
    • Simpan ke TransCompanyAccountRelays (email tampilan @aktiva.co.id).
    • Buat record domain (dengan pengecekan DNS).
    • File: controllers/biliings/checkoutServicePackages/.
  2. Pembayaran (callback Xendit, POST /api/v1/callback-payment) — aktifkan langganan, buat/aktifkan relay Zimbra, update file .cf paket.

  3. Aktivasi relay (activingAccountRelay):

    • Set status akun Zimbra → active.
    • Tambahkan regex relay ke file paket (documents/{PackageName}.cf).
    • Update listdomain.txt, bysender, slm-exceptions-db via helpers/fileConfig.helper.js.
  4. Generate API token (POST /api/v1/companies/email-api-token):

    • controllers/company/generateEmailApiToken/.
    • Memanggil zmtaHelper.generateToken(companyUuid, userUuid).
    • Mendaftarkan semua domain company ke ZoneMTA beserta batas ukuran attachment.
  5. Ambil kredensial (GET /api/v1/companies/email-api-token):

    • Mengembalikan { apiEndpoint: ZMTA_SEND_EMAIL_ENDPOINT, token, status, ... }.
  6. Opsional — setup script Zimbra (GET /api/v1/companies/generate-setup-script):

    • Membuat setup-zimbra.sh berisi akun/password relay & domain.
    • Pelanggan menjalankannya di server Zimbra mereka untuk mengkonfigurasi relay outbound.

Siklus hidup relay account (Zimbra)

EventAksi ZimbraFile
CheckoutBuat akun (closed)checkoutServicePackagesController.js
Aktivasi relayStatus → active, append .cfactivingAccountRelayService.js
Kuota 100%Status → closed, relay suspendedcontrollers/callbackRawLog.js, sparkpostService.js
Pembayaran diterimaStatus → activecontrollers/callbackXendit.js
Ganti passwordzimbraSetPasswordadmin changePasswordRelay
HousekeepingHapus akun suspended >1 bulancron/job-relay-account-housekeeping.js

Kredensial relay disimpan di TransCompanyAccountRelays: zimbraUserId, email, password, status.

Penggunaan email-api-token

RouteFileAksi
POST .../email-api-tokencontrollers/company/generateEmailApiToken/Generate token + register domain di ZMTA
GET .../email-api-tokencontrollers/company/getEmailApiToken/Kembalikan token + ZMTA_SEND_EMAIL_ENDPOINT
PATCH .../email-api-tokencontrollers/company/renewEmailApiToken/Regenerasi token via zmtaHelper.regenerateToken

TIP

Token dikelola oleh plugin API ZoneMTA, bukan disimpan di database aplikasi ini. Helper integrasinya ada di helpers/zone-mta.helper.js (Referensi Integrasi).