Jurnal de schimbări
Ce e nou.
Fiecare îmbunătățire a platformei, pe măsură ce se livrează.
· kamo-internal
"Toate conduce / conturi / aplicații" pe o campanie, la orice dimensiune
Fiecare casetă de identitate de pe editorul campaniei are acum o cutie "Toate ..." lângă ea. Ticked, cutia se pliază într-o panou live pentru toată lumea de acest fel membru semnat-in poate vedea, cu câte adrese care vine la rafinare în loc ca EmailService anunță o cifră mai bună. O cutie pe care membrul nu o poate folosi spune de ce. Nimic din editor nu mai ţine întreaga listă: - Lista salvata este o retea paginata a serverului (cautare dupa adresa, filtrare dupa stare, marcarea randurilor de luat Off), și Salvează trimite modificările paginii ca felii cu o bară de progres - "Previzualizare ca" este o căutare pe noile adrese ale acestei pagini, lista salvată și fiecare bifat audiență, o pagină la un moment dat, în loc de un meniu de primele cincizeci de adrese încărcate în browser. - Rezumatul beneficiarului adaugă lista, ce va adăuga Salvare și fiecare public, și spune clar că Nimeni nu este trimis prin e-mail de două ori și opt-outs vin în timp ce trimite. - O campanie de trimitere arată cât de departe a fost adunat fiecare public. Outbox-ul înscenat, rezumatul spațiului de lucru outbox și outbox felie editorului nu mai sondaj: Recitesc pe cadrele de progres ale campaniilor.
· EmailService
O campanie poate merge la fiecare plumb, cont sau cerere un membru poate vedea
"Toate conduce / conturi / aplicații" este o regulă, nu o listă. Acesta este stocat cu campania ( Blob furnizor în vrac, campaniePublici Trimite, și este adunat de dispecer matura doar câteva mii de destinatari înainte de ceea ce Gazdele pot lua, astfel încât un public de miliarde nu există niciodată ca o listă oriunde. - Reach: exact ceea ce membrul ar putea citi demascate cu Vizualizare informații de contact ale altora; nealocate, de asemenea, are nevoie Vezi piste nealocate sau un gratuit pentru toți produs), conturi la View Accounts care au fost de acord cu marketingul, aplicatii cu conducta. - Reading: organizaţii mici prin propriul lor index prin id; cele mari prin hash-bucket matura tabelul (yb hash code on the primar key, tounded with a hinter) Mesele de haşiş pot fi căutate. - Numărare: exact pentru organizațiile mici, deduse pentru cele mari din hash găleți aleatorii cu o 95% gama, rafinat live peste NATS (email-audiență) și cached per ajunge în Redis. - Rândurile adunate sunt destinatari obișnuiți, verificați opt-out, introduceți PE CONFLICT NU FACE NIMIC (niciodată adresa de două ori) și marcate atât de unticking o sursă ia înapoi doar ceea ce a pus în scenă. O campanie nu este Terminat în timp ce publicul său este încă în curs de colectare; anularea tot ceea ce stânga se oprește. - Lista de trimitere este paginata (/recipienti/pagina, o cautare pe indexul adresei) si schimbata in felii (/recipients/appende, /recipients/remote); ștergeți și duplicate nu mai încărcați și eliberați ori li se atribuie o pagină la un moment dat. - Previzualizare: /campanii/audienta/brawse pagini o audienta cu un ID lookup si o cautare in timp. - Chiriași PHI obține traseul de acces per-record grila de plumb pentru fiecare plumb o audiență citește.
· EmailService
Pagina de preferințe în fiecare limbă produsul vorbește
Pagina din spatele fiecărei linkuri de neabonare vorbea doar engleza. Acum vorbeşte. toate cele 22 de limbi produsul navele UI: engleză, chineză, hindi, spaniolă, Franceză, arabă, bengaleză, rusă, portugheză, indoneziană, germană, japoneză, Swahili, turcă, Tamil, vietnameză, coreeană, italiană, thailandeză, poloneză, Ucraineană și română. - Fiecare propoziţie pe care pagina spune că acum trăieşte într-un pachet de mesaje, ***************** cu limba engleză ca sursă și retragerea pentru orice lipseşte. Numerele iau forma plurală potrivită pentru fiecare limbă, iar datele sunt scrise în felul propriu al limbii (UTC). - Limba este aleasă la cerere: un parametru lang câștigă, apoi Browser's Accept-Language (valori de calitate onorate, pt-BR revine pt), apoi engleză. O limbă pe care cititorul o alege rămâne aleasă fiecare formă și redirecționare. Seturile de pagini <html lang>, Content-Language și Vary, și enumeră fiecare limbă, numită în sine, în partea de jos ca simplu link-uri. - Araba este întinsă la dreapta la stânga: dir="rtl," logic CSS, o oglindă comuta, și propriile cuvinte ale organizației (numele, subiectul, adresa) păstrat în direcţia lor. Aceste cuvinte nu sunt niciodată traduse. - Pe ecrane largi pagina foloseste acum latimea intreaga: cine este si de ce pe de o parte, alegerile de lângă ea în coloane, notele și subsol Mai jos. Sub 720px este aceeași coloană unică ca înainte. - Nimic altceva nu se schimbă: fiecare valoare este încă scăpat (text tradus în jurul valorii de prea), nici un scenariu, aceleași antete blocat-down, GET încă niciodată schimbă orice şi un link pe care nimeni nu-l mai primeşte la fel. pagină neutră, acum în limba cititorului. Testele verifica că fiecare pachet are exact cheile englezești și ocupanți și o ramură pentru fiecare formă plurală a limbii sale și acoperă negocierea limbajului, ieșire de la dreapta la stânga, date, evadare și limbajul supravieţuind unei salvări şi redirecţionării sale.
· kamo-internal
Paginile refac pe org schimba evenimentele în loc de încărcare o dată
Fiecare scriere reuşită către Api publică acum rt.org. pe baza NATS (domeniul este primul segment de cale backend, sărind peste securitate/). MediaService îl transmite la /topic/rt/org/{orgId}/{domeniul} şi utilizeazăOrgChanges subscrie peste priza comună, cărbunele izbucnește și incendii din nou după o Reconectează-te. Los, facturile și rutele Oauth-config, care nu trec prin Înainte către Api, publică-te. Pagini care au încărcat o dată acum refagă în tăcere atunci când domeniul lor se schimbă: nu flash schelet, și niciodată peste intrare nesalvat. - Conturi: atribui, și vizualizarea contului (vizual, istorie, conduce, membri, note, ordine) - Note - Comerţ: comenzi, acorduri, rezervări, achiziţii publice, cereri, servicii, cereri de servicii, înscrieri, abonamente, împrumuturi personale și raportul privind îmbătrânirea - Credite, detalii de împrumut și oferte - Cunoştinţe acasă şi articol - Cariere, legal si conformare - Configurări, setări de cont, integrări, pagina categoriei de documente și paginile planului de piață și de abonament Calendarul coalesc fluxurile de schimbare existente. Realizările urmează tema de deblocare a membrilor.
· EmailService
Un dezabonaj prin email este onorat, nu scăzut
Fiecare mesaj în vrac și în comun a oferit unsubscribe@<sender's domain> în antetul List-Dezabonare, dar nimic nu a citit cutia poștală - pentru un chiriaș Nu a fost nici măcar domeniul nostru - astfel încât fiecare opt-out trimis în acest fel a fost pierdut. - The mailto now names unsubscribe@hello.kamocrm.com ************* pentru fiecare org, cu jetonul destinatarului în această privință: Nu-ţi face griji. A se vedea nota de subsol 1. - POST /api/intern/dezabonare/mail ia ce ajunge acolo, asa cum s-a raportat de ataşatul serverului de poştă. Se găsește semnul în plus-adresă, subiect (cu Re:, în majuscule, URL-ul stâng codificat sau RFC 2047 codificat) sau link-ul transmis, îl rezolvă exact așa cum face pagina de preferințe și dezaboneaza acea adresa pentru acel org prin registrul opt-out (sursa "mailto," cu Mesaj-ID). Un rând de campanie încă așteaptă să fie trimis este S-a tras, ca şi cu legătura cu un clic. O faci de două ori nu schimbă nimic. - Un mesaj fără un semn că numele cuiva nu schimbă nimic: nimeni nu este nesubscris de o presupunere de la adresa, pe care oricine o poate scrie. Nimic nu este trimis înapoi. Jurnalul păstrează domeniul rezultatului, org, expeditor și Mesaj-ID, niciodată subiectul sau corpul. - Se află în spatele InternAuthFilter ca restul /api / intern, refuză solicită peste 64 KiB și încearcă cel mult cinci jetoane pentru fiecare mesaj.
· kamo-internal
Fila Opt Out și update-ul cipului de plumb live
Amândoi se abonează la ************* (EmailService and SecurityService published after every commised change; MediaService relees), so a recipient unsubscribing, a bounce or a colege's edit shows at ancether load. Id-ul orga este accesorul string, nu un număr rotunjit. O schimbare pe jumătate făcută în editor este păstrată atunci când adresa se deplasează sub ea, cu o notă care spune acest lucru. Picătură, de asemenea, capacele de lățime fila a avut pe un select și două paragrafe.
· EmailService
Comment
Registrul spune acum OptOutChangePublisher după fiecare schimbare comisă - un destinatar pe pagina de preferințe, un salt, un membru în Setări - și publică rt.org.{orgId}.email-opt-outs pe baza NATS pentru MediaService pentru a releu. Cadrul nu are adresa; ecranul reciteste ceea ce vizualizatorul poate vedea.
· SecurityService
Schimbarea opţională a unui fir reîmprospătează ecranele deschise live
Registrul de aici spune OptOutChangePublisher după schimbarea se angajează, care publică rt.org.{orgId}.email-opt-out pe baza NATS (acest serviciu JetStream stream este chat.>), transmis de MediaService. Nici o adresă în cadru.
· kamo-shared-library
Registrul opt-out spune atunci când lista unei organizații sa schimbat
Un ascultător opţional, spus după schimbarea se angajează, astfel încât ecranele care arată lista poate reîmprospăta live în loc de încărcare o dată. Acesta poartă numai organizația: care a optat afară este în spatele propriului drept, astfel încât ecranul re-citește ceea ce vizualizatorul său poate vedea. Constructoarele existente sunt neschimbate.
· KlusterServices
Mail to unsubscribe@hello.kamocrm.com access EmailService
Fiecare mesaj vrac și partajat-article oferă un dezabonare prin e-mail (List-Unsubscribe mailto), dar e-mail la acea adresă a mers la postmaster și nu a fost niciodată acţionat. Acum, mâinile postfix exact acea adresă, și unsubscribe+anything@ pe același domeniu, la o conductă mică care spools mesaj, și un nou unsubscribe-mail ataș postează-l la EmailService's /api/intern/unsubscribe/mail. EmailService găsește jetonul destinatarului în obiectul (sau adresa plus sau linkul transmis) și dezabonații le exact ca link-ul un click face; nimic fără un jeton valid este acceptate şi retrase. - Orice altă adresă este direcţionată ca înainte: singura linie regexp de potrivire unsubscribe@hello.kamocrm.com stă deasupra poştaşului prinde-tot, şi Transport maps numeşte decât pseudo-domeniile pe care le rescrie. - Nimic nu este vreodată sărit sau răspuns la: conducta răspunde doar vreodată "livrat" sau "încercaţi mai târziu," şi îşi blochează spool-ul la 5000 de mesaje. - Ataş reutilizează copia postfix-bulk-livrare-evenimente a intern secret, opţional, şi nu iese niciodată, aşa că nu poate păstra postfix de la Pornirea sau scoaterea podului din serviciul său.
· AIService
Agentul de vanzari onoreaza lista de opt-out a organizatiei
Înainte de orice e-mail atinge poarta outbound acum cere e-mail organizației Eliberează registrul cu adresa contactului. Adresa este cea de contact Puncte cheie la: e-mailul pentru plumb:<uid>, al membrului (sau al utilizatorului acestuia) pentru membru:<id> și numai în cazul în care plumbul sau membrul aparține aceluiași organizaţie. O adresă de pe lista de do-not-email, sau oprit, este refuzat ca SUPREZAT OPT out cu un motiv care începe EMAIL OPTED OUT ORG LIST. Este Verificat imediat dupa opt-out contactului propriu si inainte de toate Întâmplător şi se aplică chiar şi unui contact pe care agentul nu l-a atins niciodată. Dacă Lista nu poate fi citită și e-mailul este refuzat (EMAIL OPT OUT CHECK FAILED): Agent de informare este nesolicitat, astfel încât un cec fără răspuns nu trebuie să devină un Trimite. Alte canale sunt neschimbate. Un opt-out înregistrat prin înregistrareOptOut pentru e-mail, sau pentru fiecare canal, acum de asemenea, pune adresa pe lista de do-not-email a organizației (ratiune UNSUBSCRIBE, sursă ai-agent-opt-out, context AI CONTACT cu cheia de contact); Deci fiecare expeditor din organizaţie şi pagina principală o văd. Ledger citeşte şi scrie o tranzacţie proprie şi nu aruncă niciodată. ă Registrul este tranzactional in sine, si o exceptie in interiorul apelantului tranzacția ar activa rândul de audit al refuzului sau al persoanei de contact Opreşte-te. Un scriere eșuată este autentificat și propriul contact opt-out încă stă. Registrul este declarat ca o fasole peste cele trei depozite sale. Sonda sa pentru noi mese opt-out este construit din DataSource primar, singura aceasta Serviciul are. com.kamo.z.shared.email se alătură scanarea depozitului; fasole și Scanarea trebuie să se schimbe împreună.
· MediaService
Reacţii adverse la/topic/rt/org/{orgId}/{domeniul}
Scriitorii publică rt.org.{orgId}.{domeniu} pe nucleul NAT după o schimbare de succes; fiecare pod îl retransmite la subiectul orgului, astfel încât ecranele deschise să se refacă în loc să se încarce o dată. SUBSCRIBE este verificat împotriva org sesiune, iar clientul SEND la prefix este refuzat.
· kamo-marketing
O vânătoare ascunsă, per-vizitor site pentru o promovare plafonată, și semnale care conduc vizitatorii în ea
Vânătoarea: şapte încuietori per vizitator, generate dintr-o sămânţă şi Hunt SECRET, enciphered cu răspunsul anterior, ascuns pe o pagină care mută fiecare UTC La miezul nopții, cu porți de timp și un minim de 72 de ore. jetoane semnate de stat; premiul este un cod personal emis de Serviciul de securitate dintr-un șablon promovarea, derivată din sămânţa rezolvatorului, astfel încât o rejudecare să nu dureze o secundă. slot. script-uri/check-hunt.ts joacă 400 de vânătoare până la sfârșit și nu reușește construirea în cazul în care orice etapă nu poate fi rezolvată din ceea ce este arătat un rezolvator. Intrarea, pentru cineva care nu a auzit niciodată de ea: trei semnale. Un cuvânt. în eroarea de copiere a paginii de aterizare; găsirea acesteia denumește pagina următoare (Pricare În primul rând) și link-uri acolo, legătura Nav la ea strălucește, o pastilă păstrează numărul Peste pagini, iar al treilea deschide vânătoarea. Intenția de ieșire a biroului o dată per sesiune, și "start gratuit" la fiecare pas. Fiecare pas este un eveniment de vânătoare-* analiză. Totul nu se închide: niciun șablon, niciun secret sau niciun cod rămas înseamnă nu linie de jos, fără semnale și /api / răspunsuri de vânătoare ÎNCHIS. /Hunt afirmă termenii exact așa cum le definește modelul.
· SecurityService
Emite coduri personale de utilizare unică dintr-o promoție șablon
Site-ul kamocrm.com vânătoare mâinile fiecare rezolvator un cod al lor, și numai Primii N rezolvatori vreodată unul. Un cod comun nu ar putea face acest lucru: Primul rezolvator care a postat-o ar da discount tuturor. - PromotionCodeIssuer: o promotie INACTIVE este modelul; maxRedemptions este numărul de coduri personale care pot fi emise. Sloturi sunt luate printr-o actualizare condiționată, astfel încât două replici nu pot depăși problema. Un apelant poate numele codului și cererea din nou pentru un cod emis îl returnează fără Ia un al doilea slot. - *************** pe grup Secret intern. - Public promotions feed scade coduri de unică utilizare, astfel încât un cod personal nu poate fi niciodată listat sau promovat în homepage erou.
· EmailService
O pagina adevarata de preferinte in spatele fiecarei linkuri unsubscribe
Link-ul dezabonare a deschis un card de confirmare sau de plecare. Cineva care Voiam doar mai puţine e-mail-uri, dar nimic nu le-a spus de ce. Ei au fost trimisi prin posta, ce ar continua sa ajunga, sau ca alegerea lor a fost ţinută la dosar. Link-ul deschide acum o pagină de preferințe pentru acea adresă și expeditor. Nesubscrisul din toate lucrurile este primul şi este o singură presă. După aceea, cititorul poate opri un tip de mail (atunci când există mai multe pentru a alege între, sau unul este deja oprit) sau pauză totul pentru 30, 60 sau 90 de zile. Odată dezabonate pot rescrie cu un singur buton, sau spune expeditorului de ce au plecat. Pagina spune de ce a venit email-ul, ce vor primi în continuare, și că fiecare schimbare este înregistrată. Fiecare schimbare trece prin registrul opt-out împreună cu cererea a venit de la, astfel încât istoria arată alegerea a fost propria cititor. Deschiderea paginii înregistrează o privelişte şi nu schimbă nimic. Cereri cu un singur clic din partea clientilor postali (RFC 8058) inca dezaboneaza-te din orice, mereu Răspundeţi la 200, şi trageţi încă un rând de campanie coadă de la trimiterea sa. Un link că numele nimănui nu primeşte aceeaşi pagină neutră pe fiecare rută şi niciodată ajunge la registru. Pagina este format HTML simplu, fără script. Este desenat în expeditorului culoarea mărcii, ajustată până când întâlnește contrastul WCAG atât în lumină, cât și Teme întunecate, și funcționează de la 320px larg în sus. Fiecare răspuns poartă un politica strictă de securitate a conținutului, niciun referer (semnul este în URL); fără magazin, fără index şi fără cadru. Retrimiterea de vieți în suprimare / pagină: un record de vizualizare, un redautor pur că teste și previzualizare apel direct, și un serviciu care rezolvă jetoane și Vorbeşte cu registrul. Controlorul doar trasee și setează antetele.
· kamo-internal
E-mail opt-out cip și panou pe pagina de plumb
Pe lângă adresa de e-mail a liderului există acum un cip care spune dacă persoana poate fi trimis prin e-mail: E-mail-uri permise, optate din toate e-mail-urile, întrerupte până la o dată, Unele e-mailuri oprite, sau fără adresă de e-mail. Acesta deschide un panou care explică starea curentă în cuvinte simple (care a schimbat-o, când și de ce), cu întrerupătoare pentru fiecare tip de e-mail, un comutator "opt out of all email," o pauză de 30/60/90-zile sau încheie unul, și istoria recentă cu detaliile cererii din spatele unui comuta. Ori de câte ori o schimbare ar lăsa e-mail ajunge din nou persoana, nota devine Necesită, spune de ce, și Salvați-l așteaptă. Un membru care nu poate schimba este a spus de ce și vede totul citit-doar; înainte de tabelele de istorie există Panoul spune atât de calm în loc să cedeze. E-mail acţiune rapidă acum întreabă mai întâi atunci când persoana a optat din toate e-mail sau a oprit-o, și permite membrul scrie oricum pentru un răspuns unu la unu. Adaugă traseul proxy pentru ************* trece campul serverului si codul prin astfel încât panoul poate pune o eroare langa dreapta intrare.
· SecurityService
See and change a lead's email opt-out from the lead
Un membru care lucrează cu o pistă poate vedea acum dacă acea persoană poate fi trimisă prin e-mail și modificați-l, fără lista de setări opt-out la nivel de org. GET *************** răspunsuri cu starea adresei pe registrul de opt-out al organizației, cele mai recente zece modificări și subiectele o adresă se poate opri. Cine o poate citi urmează exemplul propriu-zis (401/404/403 ca pentru deschiderea plumbului, piste gratuite incluse). Un apelant a cărui vedere a Datele de contact ale lui Lead sunt mascate. Adresa este mascată în acelaşi fel şi nu. Detalii IP, browser sau sesiune pe rândurile de istorie. Pune pe aceeași cale o schimbă. Este permis exact atunci când se editează acest datele de contact ale liderului sunt permise (atribuit, sau EDIT LEAD CONTACT INFO Others) Plus view UNASsignED LEADS pentru un plumb nealocat) și niciodată în timp ce adresa este mascat. Modificarea se înregistrează ca MANUAL din "lider:<id>," cu membrul; adresa și browserul cererii și un hash al sesiunii. Permiterea e-mailului are nevoie din nou de o notă pe care registrul o aplică (400 cu "comentariu"); până la tabelele de istorie există o schimbare este refuzat cu 503 ISTORIE UNAVAILEBILE. Fiecare De asemenea, schimbarea lasă un rând pe tab-ul Istorie de plumb. Registrul este declarat aici cu propria sonda schema, cum face EmailService.
· EmailService
Un admin org poate vedea și schimba întreaga listă opt-out
Configurări - > E-mail - > Optează Acum are API sub /api/email/opt-out, spatele MANAGEMENT EMAIL OPT OUTS Un rezumat cu ultimele 30 de zile, lista filtrată de stat, motiv și adresă, o adresă cu istoricul său complet și oriunde în altă parte apare în organizaţie, activitatea la nivel de org, un CSV export, și modificări și note făcute prin registrul opt-out. Fiecare schimbare este înregistrate împotriva membrului, a clientului adresa proxy a trecut mai departe, și a Hash de sesiune lor. Id-urile sunt trimise ca și siruri de caractere și ori ca ISO-8601, ca Aplicația web așteaptă. Până la tabelele de istorie există lista, rezumat, adresă și export încă munca din lista do-not-email singur, și o schimbare răspunsuri 503 cu ISTORIE NAVAILABIL în loc de a fi pe jumătate făcut. Sonda schema îşi construieşte acum interogarea în baza de date primară. A fost să fiu având în vedere singura fasole JdbcTemplate în acest serviciu, serverul de mail MySQL unul, astfel încât nu ar putea vedea mesele de opt-out și fiecare schimbare a membrilor ar avea a fost refuzat.
· kamo-internal
Configurări - > E-mail - > Optează Out, lista de do-not-email a organizației
Toată lumea care a cerut să nu fie trimis prin e-mail, într-un singur loc. Un catarg spune cât de multe sunt off toate e-mail și de ce (nesubscris, sarit, marcat ca spam, ne-a cerut să se oprească), cât de multe oprit doar unele tipuri sau pauză, și modul în care lista sa mutat peste treizeci de zile. Lista poate fi căutată. filtrabilă; o adresă se deschide lângă ea cu: ceea ce primesc un rând pentru toate e-mail-urile, unul pentru fiecare tip de e-mail, și o pauză, salvat ca un curent. Letting mail ajunge din nou cineva are nevoie de un bilet spune cine a cerut și atunci când, pentru că această notă este înregistrarea consimțământului lor. cunoscut sub numele de plumb, contact, campanie trimite, cerere de locuri de muncă, alerte de locuri de muncă și AI asistent opt-out care partajează adresa istorie fiecare schimbare ca o cronologie: ceea ce sa mutat (înainte/după), care a făcut-o și prin ce, nota, și cererea a venit de la (adresa de rețea, lanț de transfer, browser, limbă) Plus un flux de activitate la nivel de org, adăugând o adresă de mână, și un export CSV. Gated by MANAGEMENT EMAIL OPT OUTS (un copil al Manage EMAIL SETTINGS), oglindit în RoleRightType.ts și rightsHierarchy.ts; fila, meniul de intrare și cardul de setări apar doar cu ea.
· kamo-internal
Pătrate, butoane cu margini și un deget de 2 px-corn pe fiecare bara de defilare
Cele patru butoane ale barului (sari pentru a începe, pas înapoi, pas înainte, sari până la capăt) sunt acum 20px pătrate cu colțuri dure, iar degetul mare păstrează doar o rază de 2px. Ambele transporta un singur pixel inset bevel - lumina de-a lungul partea de sus și stânga, întuneric de-a lungul partea de jos și dreapta - în alb translucid și negru, astfel încât același bevel stă Pe tabla paginii, o nuanţă de brand, paleta întunecată a terminalului. Fracţiunea unică a pielii devine două pixeli radiaţii, degetul mare Radius şi butonRadius, deoarece "un cuplu de pixeli" este un absolut. Cheia pătrată este geometrie mai degrabă decât piele: ține pe o bară scurtă (10x10 pe o bandă de 72px) și pe pielea arcadei, al cărei aspect este altfel neschimbat.
· EmailService
Fiecare verificare de suprimare și sărire trece prin registrul opt-out
Serviciul de suprimare cere acum EmailOptOutLedger, astfel încât o verificare vede lista do-not-email, pauze şi subiecte asemănătoare, şi un salt aterizează în aceeaşi istorie ca un dezabonat. Apelantii numesc fel de mail sunt pe cale de a trimite: campanii (materializa, restaura, poarta târziu) întreba despre PARTE CAMPAIGNS, acţiuni de articol despre SHARED ARTICOLE. Sărituri transporta răspunsul serverului și campania în rândul istoriei. OptOutSchemaProbe spune registrul dacă KamoInitializerService a creat cele două noi tabele încă; până când aceasta are, trimiterea onoruri lista singur în loc de a eşua pe o masă lipsă.
· kamo-shared-library
Un registru de opt-out, subiecte, pauze și o istorie de fiecare schimbare
Lista do-not-email ar putea fi scrisă dar nu citită, modificată sau explicată. Acest lucru adaugă singurul loc din care este citit şi scris, pentru fiecare serviciu: e-mail optout topics o adresă care a oprit un fel de e-mail, sau oprit toate e-mail optout vents introduce-numai istorie: care (recipient, membru, sistem), de unde (client IP, întregul X-forwarded-For chain, utilizator agent, limbă, gazdă, arbitru, hash sesiune), de ce (raţiune, sursă, notă, feedback); prin ce (campanie, plumb) și statul înainte și după e-mail supresii păstrează sensul său, astfel încât fiecare expeditor care onorează deja încă o face. EmailOptOutLedger raspunsuri "poate fi trimis" din toate trei si scrie un rand de istorie pe o parte a statului o schimbare de fapt mutat. Un membru care permite din nou mail trebuie să spună de ce; că nota este înregistrarea consimțământului. Până la noile tabele, registrul revine la listă. Singur și refuză schimbările pe care nu le poate înregistra, mai degrabă decât să nu le trimită. Clasă simplă, nu un @Service: fiecare serviciu scanează com.kamo, și unul fără e-mail Depozitele nu ar putea începe să-l construiască. Fiecare serviciu o declară cu @Bean. De asemenea, Manage EMAIL OPT OUTS (320), dreapta org pentru Setări - > E-mail - > Opt Out, un copil de Managere email setings.
· kamo-internal
Gazde outbound de e-mail, trimite ferestre, pe-host de încălzire-up și outbox înscenat
- Setări → Platformă → Configurație câștigă o filă Outbound E-Mail Gazde, în spatele platformei Managerul drept OUTBOUND EMAIL HOSTS: gazdele împărtăşite cu fiecare organizaţie şi cele păstrate pentru organizarea platformei, cu fiecare setare de conexiune, disponibilitate, controale de conexiune; Testul trimite şi încălzirea fiecărei gazde. - Setări → E-mail → Bulk Email Sender este reconstruit pe GET vrac-furnizor / Overview: rotaţia gazdele proprii ale organizaţiei şi platforma (witchable per organizaţie), un robin rotund vizualizare, expeditorul, un editor de ferestre trimite (zile săptămâni, mai multe intervale de timp, intervale de noapte, propriile sale fusul orar sau al organizaţiei) şi un raport de încălzire în limbaj simplu pentru fiecare gazdă. Încălzirea poate nu mai este oprit. - /marketing/email/outbox listează fiecare e-mail înscenat anulează e-mailuri unice, o selecție, sau tot ce rămâne, cu anula. Spaţiul de lucru, Pacing banner și editorul de campanie link-ul la ea și citiți noua capacitate per-host. - Editor gazdă partajat cu preflight live (adrese soluţionate, duplicate şi adrese private refuzuri), gazdele outbound și clienții outbox API și statutul de destinatar CANCELLED.
· EmailService
Mai multe gazde outbound per org, trimis rotund-robin, fiecare încălzit pe cont propriu, în interiorul unei ferestre trimite
Poşta de campanie a unei organizaţii lasă acum prin orice număr de gazde ieşite din comun, un mesaj la o timp în rotație, în loc de un furnizor în vrac. - Gazde: propria organizatie (dinspre Hostes in blocul furnizor de vrac) si platforma (platformOutboundHosts in the platforme organization's blob), SHARED cu fiecare organizație sau Doar atât. Fiecare setare SMTP este explicită: securitate, mecanism SASL, verificare TLS și protocoale, nume HELO, expeditor plic, timeouts, limite oră/zi, DSN, 8BITMIME, SOCKS. HosteSessionFactory construiește sesiunea de la ei; EmailSmtpService.sendVia trimite prin ea. - Acelaşi server nu se adaugă niciodată de două ori (acelaşi nume sau adresă comună, oricare ar fi portul sau login) si gazda unei organizatii trebuie sa fie un server public: nume private si incluster si Adresele sunt refuzate pe salvare și din nou înainte de fiecare conexiune. - Încălzirea este pe gazda și întotdeauna pe. WarmupService lucreaza pe un WarmupHandle; o gazda platforma are unul încălzire comună de fiecare organizație folosind-o. Noile curse încep la începutul zilei. - WarmupReleaser este singurul expeditor: runda-robin peste gazdele fiecărei organizații, sărind peste o gazdă de așteptare pentru slotul său, la capac, frânat, la propria limită sau înapoi după ce nu a reușit Conectează-te. O conexiune, TLS sau o eroare de sign-in nu mai contează o încercare împotriva destinatarului. - Trimite fereastra pe organizatie (zile, una sau mai multe intervale, zona proprie sau orga). WarmupPacer se raspandeste sapca de fiecare zi doar pe fereastra. - Outbox înscenat: /api/email/campaigns/outbox liste la coadă destinatari și le anulează sau le restabilește. Un destinatar anulat este SUPPRESSED cu o notă (fără statut DDL) și citește ca CANCELLED. - Punct final: Nu-ţi face griji. gazduieste platforma la *************în spatele managerului outboound email hosts. O singură gazdă scrie Răspunde 410. - OutboundHostBackfill semintele releul k3m1 ca o gazda PLATFORM ONLY si migreaza petele o singura gazda. Nu se schimbă schema.
· KlusterServices
Postfix-bulk acceptă orice expeditor de la EmailService [skip ci]
Releul este acum o platformă outbound gazdă că e-mail de campanie fiecare organizație poate merge prin, ca orice ar fi din acea organizație trimite ca. Numai expeditorul nul este încă refuzat, cu 4xx. Reachabilitatea este neschimbată: reţelele mele şi reţeaua de poliţie o limitează la E-mailService capsule. Aplicat direct (kubectl aplica - f ***************
· kamo-shared-library
MANAGE OUTBOUND EMAIL HOSTS, gazdele de e-mail ale platformei
O platforma dreapta pentru outbound e-mail gazde campanie mail frunze prin: gazdele comune cu fiecare organizație și cele păstrate pentru organizarea platformei, acreditările lor, disponibilitate şi încălzire. Înființat de e-mailservice's PlatformOutboundHostsController prin Platform Rights Rezolvator. Apendice, astfel încât nici un drept existent nu este renumerotat.
· kamo-internal
Ștergeți, filtrați și dezactivați rândurile de ieșire NoReply
Pagina de audit câștigă o coloană subsistem și filtru, selecție caseta de verificare cu "selectează toate" și "selectează toate potrivirile" și șterge pentru un singur rând; rândurile selectate, tot ce corespunde filtrelor, sau totul, fiecare în spatele unei confirmări că numele tabelului sunt eliminate rândurile. "Reținerea și înregistrarea" comută înregistrarea fiecărui subsistem la sau în afara acestuia și stabilește cât de lungi sunt rândurile păstrate. Cererea fiecare șterge devine, și modul în care modelul de selecție al rețelei este Citeste, traieste cu propriile lor teste.
· EmailService
Registrul NoReply poate fi filtrat de subsistem, tăiat și spus ce să înregistreze
Fiecare rând denumește acum subsistemul care l-a trimis și, pentru un șablon trimis, cheia șablonului. EmailTemplateService și expeditorul de campanie deschide un NoReplyOutboundSource about their SMTP tell; anything else is Neatribuit. NoReplySubsystem mapează tastele șablonului canonic pentru subsisteme, și un test nu reușește în cazul în care un model canonic hărți la nici unul. Șterge merge la masă prin NoReplyOutboundLedger: un rând, până la 1000 de rânduri selectate, fiecare rând corespunzător filtrelor listei sau registru întreg (TRUNCATE), care trebuie să fie cerut cu confirmareaToate. Bulk șterge rula în bucăți de 500. NoReplyOutboundSettings stochează un comutator de înregistrare pe subsistem și reținere (30 de zile în mod implicit, 0 păstrează rânduri până la ștergere), cache pentru 15 secunde pe capsulă. NoReplyOutboundRetentionSweep purges hourly on one Pod. Toate noile obiective sunt doar Dumnezeu, ca lista.
· InitializerService
Indexul unic (campanie, adresă), pentru un mediu proaspăt
E-mailService folosit pentru a crea *************** pe fiecare Startup; DDL pe acest grup aparține aici în schimb. Ipotent, autoangajat (YugabyteDB construiește indexuri online) și duplicatele sunt numărate și înregistrate; niciodată șterse - un rând contactat este o înregistrare permanentă a unei campanii Adresa. EmailService verifică acum doar indexul cu acest nume.
· kamo-internal
Editorul campaniei scrie margine la margine, fuzionează jetoane în propria lor coloană
Subiectul se află sub titlul de campanie și publicul lângă cip statutul, astfel încât compune pas este corpul de e-mail singur, umple mijlocul paginii, cu jetoanele de fuziune într-o coloană pe Dreapta. Nimic nu salvează pe cont propriu, astfel încât pagina acum marchează editează serverul nu a văzut și întreabă înainte de a pleca le-ar arunca; șablonInlineEditor raportează propria corp editează în afară de la normalizarea lui Quill în timpul sarcinii, astfel încât marca să nu fie ridicată doar prin deschiderea unei campanii.

Universul tău te așteaptă.
Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.
Gratuit pentru totdeauna — nu este necesar un card de credit