El. pašto infrastruktūra
Mūsų el. pašto servisas — Postfix/OpenDKIM SMTP, DKIM siuntimai ir kampanijos per domenus, viena API.
Dev-storyIššūkis
Kiekvienam produktui reikėjo siųsti laiškus — patvirtinimus, perspėjimus, kampanijas — ir nenorėjome, kad kiekvienas pats derintų SMTP, DKIM ir siuntėjo reputaciją.
Ką darėme
Vienas pašto servisas: API, pasirašantis DKIM, tvarkantis „from“ adresus ir API raktus, apdorojantis transakcinius laiškus bei suplanuotas kampanijas su atidarymų/paspaudimų statistika ir automatikos trigeriais. Programos POST'ina į „mailer.webedge.dev/api/v1/send“ su raktu.
Rezultatas
Kalendorius, ePokalbis ir kitos programos siunčia per šį vieną servisą, o pristatomumas (DKIM, „from“ adresas) tvarkomas vienoje vietoje, o ne kiekviename projekte.
Dev-story straipsnis
Kaip buvo kuriamas projektas: El. pašto infrastruktūra
Kiekvienai mūsų programai reikia siųsti el. laiškus — kodus, kvitus, perspėjimus, kampanijas — o įprastas atsakymas yra trečios šalies siuntėjas, kurio nematai ir moki už žinutę. Norėjome savo kelio: tikro SMTP steko, kurį valdome patys, DKIM pasirašyto ir daugiadomenio, už vieno API, kad nė viena programa neliestų SMTP.
Skyriai
05
Moduliai
04
Stackas
Node.js + Postfix
Kodėl projektas atsirado
Kiekvienam produktui reikėjo siųsti laiškus — patvirtinimus, perspėjimus, kampanijas — ir nenorėjome, kad kiekvienas pats derintų SMTP, DKIM ir siuntėjo reputaciją.
Kiekvienai mūsų programai reikia siųsti el. laiškus — kodus, kvitus, perspėjimus, kampanijas — o įprastas atsakymas yra trečios šalies siuntėjas, kurio nematai ir moki už žinutę. Norėjome savo kelio: tikro SMTP steko, kurį valdome patys, DKIM pasirašyto ir daugiadomenio, už vieno API, kad nė viena programa neliestų SMTP.
Ką sukūrėme
Vienas pašto servisas: API, pasirašantis DKIM, tvarkantis „from“ adresus ir API raktus, apdorojantis transakcinius laiškus bei suplanuotas kampanijas su atidarymų/paspaudimų statistika ir automatikos trigeriais. Programos POST'ina į „mailer.webedge.dev/api/v1/send“ su raktu.
Pradėjo kaip savas SMTP branduolys (Postfix + OpenDKIM + REST API), išaugo į profesionalią v2 tarnybą, o tada į v3 su daugiadomeniu palaikymu, Vue skydeliu ir auth sistema. Programos atiduoda žinutę vienam API raktui; servisas ją pasirašo (DKIM/SPF/DMARC), išsiunčia ir įrašo, kas realiai išėjo, o veikia už nginx reverse proxy.
Pagrindiniai moduliai ir vartotojo kelias
Vienas API raktas, vienas integracijos taškas: transakciniai siuntimai ir suplanuotos kampanijos eina per tą patį servisą, tad nė viena programa neturi savo SMTP prisijungimų ar logikos.
DKIM pasirašyta, daugiadomenis: OpenDKIM pasirašo išeinantį paštą pagal domeną, tad pristatomumas ir domeno reputacija tvarkomi centralizuotai, ne kiekvienoje programoje.
Vue skydelis ir auth sistema padaro jį valdomą — domenai, siuntimai ir kampanijos tvarkomi sąsajoje, ne konfig failuose.
Veikia už nginx reverse proxy su trust-proxy, tad servisas mato tikrus klientų adresus ir lieka diegiamas kaip įprasta infrastruktūra.
Architektūra ir technologiniai sprendimai
Sukurta su Node.js, Postfix, DKIM.
Node.js servisas; Postfix + OpenDKIM SMTP ir pasirašymo sluoksniui; REST API kaip vienintelis įėjimas; Vue frontend ir auth valdymui; nginx reverse proxy priekyje.
Rezultatas ir pamokos
Kalendorius, ePokalbis ir kitos programos siunčia per šį vieną servisą, o pristatomumas (DKIM, „from“ adresas) tvarkomas vienoje vietoje, o ne kiekviename projekte.
Pašto servisas, kurį valdome nuo pradžios iki galo: DKIM pasirašyti transakciniai laiškai ir kampanijos per domenus už vieno API rakto, tad kiekviena WebEdge programa siunčia per vieną kontroliuojamą, stebimą kelią, o ne per nuomojamą juodąją dėžę.
Toliau skaityti
Susijusios projektų istorijos
Šie projektai turi artimų technologinių arba produkto sprendimų, todėl padeda matyti, kaip tas pats principas veikia kitame kontekste.
Dev-storyCMS
Dinaminis CMS ant webedge-db — turinio tipai, medija, rolės ir vieša skaitymo API, maitinanti mūsų svetaines ir straipsnius.
Reaktyvi duomenų platforma
Reaktyvi duomenų platforma
Mūsų reaktyvus BaaS ant native SpacetimeDB — ~200k realaus laiko pristatymų/s, p95<20ms.
Dev-storyMTP-RDMA klasteris
Tensorinis 27B per du Mac'us Thunderbolt RDMA — ~70 → 90–100 tok/s.
Turite panašią idėją?
Aptarti projektą