OmniStream Docs
  • Panduan Pengguna
  • Developer
  • API Reference
Developer Hub
Pendahuluan
Autentikasi
Model Data
Webhook
WebSocket
Self-Hosting
    Prasyarat Self-HostingDocker ComposeEnvironment VariablesDatabase MigrationsMeta App SetupSMTP ConfigReverse Proxy + CORS ProduksiCORS di Produksi
Error & Rate Limit
Self-Hosting

SMTP Config

SMTP Config

Channel email OmniStream menangani dua arah:

  1. Outbound — agent membalas tiket via SMTP (via lettre dengan rustls, bukan native-tls).
  2. Inbound — binary webhook-ingestor (route /webhook/email, port dari WEBHOOK_INGESTOR_PORT) menerima notifikasi dari provider eksternal seperti SendGrid/Mailgun/SES Inbound.

Env var terkait

Keenam SMTP_* dipakai oleh modul email di dalam binary message-sender (crates/message-sender/src/email.rs). EMAIL_WEBHOOK_SECRET dipakai oleh modul email di dalam binary webhook-ingestor (route /webhook/email).

VariabelWajibDefault
SMTP_HOSTNomailpit
SMTP_PORTNo1025
SMTP_USERNAMENokosong
SMTP_PASSWORDNokosong
SMTP_FROM_ADDRESSNonoreply@omnistream.local
SMTP_ENCRYPTIONNonone
EMAIL_WEBHOOK_SECRETNokosong

SMTP_HOST kosong = channel email disabled — modul email di message-sender akan melewati job email yang datang dari channel.outbound.job.

Mode enkripsi

SMTP_ENCRYPTION menerima tiga nilai:

NilaiPort umumKapan dipakai
none1025Mailpit lokal (dev) — tanpa TLS, tanpa auth
starttls587Produksi umum (SendGrid, Gmail relay, Postfix)
tls465TLS implisit legacy

OmniStream memakai lettre dengan backend rustls-tls sesuai konvensi proyek (lihat CLAUDE.md bagian "Key Conventions") — tidak ada cabang native-tls, jadi tidak perlu OpenSSL di container image.

Contoh: SendGrid produksi

Code
SMTP_HOST=smtp.sendgrid.net SMTP_PORT=587 SMTP_USERNAME=apikey SMTP_PASSWORD=SG.xxxxxxxx SMTP_FROM_ADDRESS=support@example.com SMTP_ENCRYPTION=starttls EMAIL_WEBHOOK_SECRET=a-long-random-shared-secret

Contoh: Mailpit dev lokal

Mailpit adalah SMTP fake + web UI untuk pengembangan — sudah disiapkan di docker-compose.yml:

Code
SMTP_HOST=mailpit SMTP_PORT=1025 SMTP_ENCRYPTION=none SMTP_FROM_ADDRESS=noreply@omnistream.local

Buka web UI Mailpit di http://localhost:8025 untuk melihat semua email yang dikirim modul email di message-sender. Ideal untuk pengujian template, CSAT survey, dan campaign tanpa mengirim email nyata.

Webhook inbound email

Provider seperti SendGrid Inbound Parse, Mailgun, atau SES Inbound dikonfigurasi untuk POST ke https://your-domain.com/webhook/email → di-proxy ke binary webhook-ingestor pada port WEBHOOK_INGESTOR_PORT.

Provider harus dikonfigurasi untuk meneruskan body email yang dikomposisi ulang (plain text + HTML + attachments) ke URL tersebut. Signature verification memakai EMAIL_WEBHOOK_SECRET — detail implementasinya ada di crates/webhook-ingestor/src/routes.rs dan dibahas di developer/webhook/inbound-email.

Anda juga dapat mengelola EMAIL_WEBHOOK_SECRET dari UI Settings → Integrations channel email; nilai di DB akan override env var di polling berikutnya.

Template & SMTP-from override per integrasi

Tabel integrations bisa menyimpan smtp_from_address khusus per integrasi email (mis. saat anda punya beberapa tenant/divisi dengan alamat berbeda). Kalau field tersebut non-kosong di DB, nilainya akan override SMTP_FROM_ADDRESS env var — lihat logic di crates/api-gateway/src/main.rs:98-109.

Troubleshooting

GejalaKemungkinan penyebab
connection refused dari modul email di message-senderSMTP_HOST salah atau firewall blok port
Autentikasi gagal (535)SMTP_USERNAME atau SMTP_PASSWORD salah
TLS handshake errorMode SMTP_ENCRYPTION tidak cocok dengan port
Webhook email signature mismatchEMAIL_WEBHOOK_SECRET tidak sinkron dengan provider
Pesan keluar tapi "from" terlihat genericSMTP_FROM_ADDRESS belum di-set atau sedang ter-override dari DB
Last modified on June 8, 2026
Meta App SetupReverse Proxy + CORS Produksi
On this page
  • Env var terkait
  • Mode enkripsi
  • Contoh: SendGrid produksi
  • Contoh: Mailpit dev lokal
  • Webhook inbound email
  • Template & SMTP-from override per integrasi
  • Troubleshooting