SMTP Config
SMTP Config
Channel email OmniStream menangani dua arah:
- Outbound — agent membalas tiket via SMTP (via
lettredengan rustls, bukan native-tls). - Inbound — binary
webhook-ingestor(route/webhook/email, port dariWEBHOOK_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).
| Variabel | Wajib | Default |
|---|---|---|
SMTP_HOST | No | mailpit |
SMTP_PORT | No | 1025 |
SMTP_USERNAME | No | kosong |
SMTP_PASSWORD | No | kosong |
SMTP_FROM_ADDRESS | No | noreply@omnistream.local |
SMTP_ENCRYPTION | No | none |
EMAIL_WEBHOOK_SECRET | No | kosong |
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:
| Nilai | Port umum | Kapan dipakai |
|---|---|---|
none | 1025 | Mailpit lokal (dev) — tanpa TLS, tanpa auth |
starttls | 587 | Produksi umum (SendGrid, Gmail relay, Postfix) |
tls | 465 | TLS 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
Contoh: Mailpit dev lokal
Mailpit adalah SMTP fake + web UI untuk pengembangan — sudah disiapkan
di docker-compose.yml:
Code
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
| Gejala | Kemungkinan penyebab |
|---|---|
connection refused dari modul email di message-sender | SMTP_HOST salah atau firewall blok port |
| Autentikasi gagal (535) | SMTP_USERNAME atau SMTP_PASSWORD salah |
| TLS handshake error | Mode SMTP_ENCRYPTION tidak cocok dengan port |
| Webhook email signature mismatch | EMAIL_WEBHOOK_SECRET tidak sinkron dengan provider |
| Pesan keluar tapi "from" terlihat generic | SMTP_FROM_ADDRESS belum di-set atau sedang ter-override dari DB |