SMTP Submission — smtp.hubina.net

Untuk aplikasi yang memang bicara SMTP (CMS, framework web, library email), Hubina menyediakan submission server dengan STARTTLS di port 587. Semua aturan tetap sama: domain terverifikasi, saldo, log, dan webhook.

Kredensial koneksi

SetelanNilai
Hostsmtp.hubina.net
Port587 (submission)
EnkripsiSTARTTLS wajib; sertifikat diverifikasi normal (tanpa perlu menonaktifkan verifikasi TLS)
AutentikasiAUTH PLAIN / AUTH LOGIN, hanya setelah TLS aktif
Usernameapi
PasswordAPI key akun Anda (hb_live_…)

Kredensial tidak pernah diterima sebelum TLS Upaya AUTH di koneksi tanpa TLS ditolak dengan 538 5.7.0. Pastikan klien Anda benar-benar menaikkan koneksi ke TLS (STARTTLS), bukan mengirim kredensial dalam bentuk polos.

Ketentuan sender

  • Envelope sender (MAIL FROM) dan header From: keduanya harus memakai domain yang dimiliki akun Anda dan berstatus terverifikasi.
  • Mengirim dari domain pihak lain ditolak pada tahap MAIL FROM (550 5.7.1), dan header From: yang berbeda domain juga ditolak.
  • Header Bcc: dihapus dari pesan sebelum diteruskan ke penyedia; penerima Bcc tetap menerima email.
  • Header From: dan Subject: wajib ada di pesan.

Contoh konfigurasi

Nodemailer (Node.js)

Node.js
import nodemailer from 'nodemailer';

const transport = nodemailer.createTransport({
  host: 'smtp.hubina.net',
  port: 587,
  secure: false,
  requireTLS: true,
  auth: { user: 'api', pass: process.env.HUBINA_API_KEY },
});

await transport.sendMail({
  from: '"Aplikasi Anda" <[email protected]>',
  to: '[email protected]',
  subject: 'Halo dari Hubina',
  text: 'Email lewat SMTP submission.',
});

Laravel

.env
MAIL_MAILER=smtp
MAIL_HOST=smtp.hubina.net
MAIL_PORT=587
MAIL_USERNAME=api
MAIL_PASSWORD=hb_live_YOUR_API_KEY
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="Aplikasi Anda"

Django

settings.py
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.hubina.net"
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = "api"
EMAIL_HOST_PASSWORD = "hb_live_YOUR_API_KEY"
DEFAULT_FROM_EMAIL = "[email protected]"

Uji dari terminal

openssl
openssl s_client -starttls smtp -connect smtp.hubina.net:587 -quiet
# lalu ketik (baris demi baris):
# EHLO domain-anda.com
# AUTH LOGIN
# … masukkan username "api" dan API key dalam base64 …

Retry dan deduplication

Hubina memakai header Message-ID sebagai kunci deduplication per akun. SertakanMessage-ID yang tetap saat aplikasi Anda mengulang pengiriman yang sama:

Kondisi pengiriman ulangRespons SMTPTagihan
Message-ID sama dan percobaan sebelumnya sudah diterima250 Ok (ditandai duplikat)Tidak ada tagihan kedua
Percobaan sebelumnya masih diproses451 4.3.0Belum ada; tunggu lalu ulangi
Percobaan sebelumnya belum pasti hasilnya451 4.3.0Dana masih ditahan sampai direkonsiliasi
Percobaan sebelumnya gagal dan dana sudah dikembalikanPercobaan baru diprosesRate akan dicadangkan lagi
Lebih dari 10 percobaan untuk Message-ID yang sama451 4.3.0Tidak ada tagihan baru

Pesan tanpa header Message-ID tidak dapat dideduplikasi — buat Message-ID unik per pesan logis bila aplikasi Anda mengulang pengiriman.

Kode respons dan artinya

KodeArtiSeharusnya
538 5.7.0Autentikasi dicoba sebelum TLSKirim STARTTLS dulu (klien normal sudah melakukannya otomatis dengan setelan TLS).
535 5.7.8Kredensial tidak valid / API key dicabutPeriksa username api dan API key; percobaan berulang dipersilakan tapi akan tetap gagal.
530 5.7.0Perintah dikirim sebelum AUTHAutentikasi dulu.
550 5.7.1Domain sender tidak terverifikasi untuk akun iniSelesaikan verifikasi domain, atau ganti sender.
550 5.6.0Pesan tidak punya From: atau Subject: yang validLengkapi header wajib.
452 4.5.3Penerima melebihi 50 dalam satu pesanPecah menjadi beberapa pesan.
552 5.3.4Pesan (maks 10 MB) atau header (maks 256 KB) terlalu besarKecilkan lampiran; untuk pesan sangat besar gunakan tautan unduhan.
452 4.2.2Saldo Hubina tidak cukupTop up saldo; pesan belum diterima.
452 4.7.0Rate limit pengiriman (300 pesan/jam per key) tercapaiKurangi laju, coba lagi nanti.
421 4.7.0Terlalu banyak koneksi / percobaan koneksi (maks 5 koneksi bersamaan per IP, 25 total, 30 percobaan/menit per IP)Kurangi konkurensi; hormati jeda.
451 4.3.0Kegagalan sementara (cek domain, duplikat masih diproses, hasil belum pasti)Ulangi pesan yang sama nanti — aman dari duplikasi.
554 5.7.0Penyedia menolak pesan secara permanen pada saat submit (tidak ada tagihan)Jangan ulangi tanpa perubahan; periksa isi/alamat.
550 5.7.0Message-ID yang sama dipakai dengan isi berbedaPakai Message-ID baru untuk pesan yang isinya berubah.

Batas dan perlindungan

  • Maksimum 50 penerima per pesan, 10 MB per pesan, 256 KB per blok header.
  • Maksimum 300 pesan per jam per API key, 5 koneksi bersamaan per alamat IP, 25 koneksi bersamaan total.
  • Sesi idle ditutup setelah 5 menit tanpa aktivitas.
  • Hanya AUTH PLAIN dan LOGIN yang didukung; mekanisme lain dibalas 504 5.5.4.
  • Server ini bukan relay terbuka: tanpa autentikasi tidak ada pesan yang diterima.

Isi pesan tidak disimpan Hubina hanya menyimpan metadata perutean (pengirim, penerima, subjek, status) untuk log dan penagihan. Body email tidak pernah dipersist maupun ditulis ke log, sama seperti jalur REST API.

Di halaman ini