Changelog
Was ist neu?
Jede Verbesserung an der Plattform, wie sie geliefert wird.
· kamo-internal
"Alle Leads / Konten / Anwendungen" auf einer Kampagne, in jeder Größe
Jede ID-Box auf dem Kampagnenredakteur hat jetzt eine "Alles "...-Box daneben. Angekreuzt, faltet sich die Box in eine Live-Panel für alle dieser Art kann das angemeldete Mitglied sehen, mit wie vielen Adressen, kommt zu - für eine kleine Organisation gezählt, abgeleitet für eine große ("4.9 Milliarden . 2%") und Verfeinern an Ort und Stelle, da EmailService eine bessere Zahl ankündigt. Eine Box, die das Mitglied nicht benutzen kann, sagt, warum. Nichts in der Redaktion hält die ganze Liste mehr: - Die gespeicherte Liste ist ein Server-seitiges Gitter (Suche nach Adresse, Filter nach Status, Markierungszeilen zu nehmen off), und Speichern sendet die Änderungen der Seite als Slices mit einer Fortschrittsleiste - nicht die Liste. - "Vorschau wie" ist eine Suche über die neuen Adressen dieser Seite, die gespeicherte Liste und jede angekreuzt Publikum, eine Seite zu einer Zeit, anstelle eines Menüs der ersten fünfzig Adressen im Browser geladen. - Die Empfänger-Zusammenfassung fügt die Liste, was Speichern hinzufügen und jedes Publikum, und sagt klar, dass Niemand wird zweimal gemailt und Opt-outs kommen so, wie es sendet. - Eine Entsendungskampagne zeigt, wie weit jedes Publikum versammelt ist. Der inszenierte Outbox, die Outbox-Zusammenfassung des Arbeitsbereichs und die Outbox-Slice des Editors nicht mehr Umfrage: sie lesen die Fortschrittsrahmen der Kampagnen-Sockel erneut.
· EmailService
Eine Kampagne kann zu jeder Führung, jedem Konto oder jeder Anwendung gehen, die ein Mitglied sehen kann
"Alle Leads / Konten / Anwendungen" ist eine Regel, keine Liste. Es wird mit der Kampagne gespeichert (die Bulk-Provider Blob, Kampagne-Zuschauspiel - keine DDL), läuft auf dem Zugriff von wer auch immer es gesetzt oder gedrückt Senden, und wird von der Disponenten fegen nur ein paar tausend Empfänger vor dem, was die Outbound-Hosts können nehmen, so dass ein Publikum von Milliarden nie als Liste irgendwo existiert. - Reichweite: genau das, was das Mitglied lesen konnte unmaskiert - die Regel der Blei-Bildschirme (eigene Lead-Leitungen; andere mit Kontaktinformationen von anderen anzeigen; ungeordnete Bedürfnisse auch nicht zugewiesene Hinweise oder einen Free-for-all Produkt), Konten mit View Accounts, die Marketing, Anwendungen mit einer Pipeline vereinbart. - Lesen: kleine Organisationen durch ihren eigenen Index durch ID; große durch hash-bucket Sweep von die Tabelle (yb_hash_code auf der Primärtaste, mit einem Hinweis angeheftet) - der einzige Bereich diese hath-gewürgte Tische können suchen. - Zählung: exakt für kleine Organisationen, für große von zufälligen hash Buckets mit einem 95% Reichweite, verfeinert live über NATS (E-Mail-Publikum) und zwischengespeichert pro Reichweite in Redis. - Zusammengelegte Zeilen sind normale Empfänger, Opt-out-geprüft, eingefügt ON CONFLICT NICHTS (nie ein Adresse zweimal) und markiert so unticking eine Quelle nimmt nur zurück, was es inszeniert. Eine Kampagne ist nicht fertig, während sein Publikum noch versammelt ist; alles links zu stornieren stoppt es. - Die Sendungsliste ist abgeblättert (/Empfänger/Seite, Suche auf dem Adressindex) und in Scheiben geschnitten (/Empfänger/Append, /Empfänger/Entfernen); löschen und duplizieren Sie es nicht mehr laden und freigeben Die Zeiten werden eine Seite zu einer Zeit zugewiesen. - Vorschau: /campaigns/audience/browse pages ein Publikum mit einem id-Suche und einer zeitboxed Suche. - PHI-Mieter erhalten den Lead Grid-Zufahrtspfad pro Rekord für jeden Vorsprung, den ein Publikum liest.
· EmailService
Die Präferenzseite in jeder Sprache, die das Produkt spricht
Die Seite hinter jedem Abmeldelink sprach nur Englisch. Es spricht jetzt alle 22 Sprachen das Produkt UI Schiffe: Englisch, Chinesisch, Hindi, Spanisch, Französisch, Arabisch, Bengalisch, Russisch, Portugiesisch, Indonesisch, Deutsch, Japanisch, Swahili, Türkisch, Tamilisch, Vietnamesisch, Koreanisch, Italienisch, Thai, Polnisch, Ukrainisch und Rumänisch. - Jeder Satz, den die Seite sagt, lebt jetzt in einem Nachrichtenbündel, ************ mit Englisch als Quelle und der Fallback für alles, was fehlt. Zahlen nehmen die richtige Pluralform an für jede Sprache, und Daten sind die Sprache eigenen Weg geschrieben (UTC). - Die Sprache wird pro Anfrage gewählt: ein lang Parameter gewinnt, dann der Browser Accept-Language (Qualitätswerte geehrt, pt-BR fällt zurück auf pt), dann Englisch. Eine Sprache, die der Leser auswählt, bleibt durchgewählt jede Form und Umleitung. Die Seite setzt <html lang>, Content-Language und Vary, und listet jede Sprache, in sich selbst genannt, an der Unterseite als Ebene Links. - Arabisch ist von rechts nach links angelegt: dir="rtl", logisches CSS, ein gespiegeltes Schalter, und die eigenen Worte der Organisation (Name, Betreff, Adresse) gehalten in ihre eigene Richtung. Diese Worte werden nie übersetzt. - Auf Breitbildschirmen nutzt die Seite nun die volle Breite: für wen und warum auf der einen Seite, die Möglichkeiten daneben in Säulen, die Noten und Fußzeile unten. Unter 720px ist es die gleiche einzelne Spalte wie vorher. - Nichts anderes ändert sich: jeder Wert ist noch entleert (übersetzter Text um es auch), kein Skript, die gleichen gesperrten Header, GET immer noch nie ändert alles, und ein Link, der niemanden noch bekommt die gleichen neutrale Seite, jetzt in der Sprache des Lesers. Testen Sie, ob jedes Bündel genau die englischen Tasten hat und Platzhalter und eine Filiale für jede Pluralform ihrer Sprache und Abdeckung die Sprachverhandlung, der Rechts-Links-Ausgang, Termine, Flucht und die Sprache überlebt eine speichern und seine Umleitung.
· kamo-internal
Seiten holen Org-Veränderungs-Ereignisse statt einmal laden
Jedes erfolgreiche Schreiben durch forwardToApi veröffentlicht jetzt rt.org.{orgId'.{domain' auf Core NATS (die Domain ist das erste Backend-Pfad-Segment, überspringen Sicherheit /). MediaService leitet es an /topic/rt/org/{orgId'/{domain' und useOrgChanges abonniert über der gemeinsamen Steckdose, koaliert platzt und Brände wieder nach einem wieder verbinden. Die Los-, Billing- und Oauth-config-Routen, die nicht durchlaufen forwardToApi, veröffentlichen Sie selbst. Seiten, die einmal geladen haben, kehren jetzt lautlos um, wenn sich ihre Domain ändert: nein Skelettblitz, und nie über ungesalte Eingabe. - Konten: zustreten und die Kontoansicht (Übersicht, Historie, Leads, Mitglieder, Anmerkungen, Bestellungen) - Anmerkungen - Handel: Aufträge, Vereinbarungen, Buchungen, Beschaffung, Anfragen, Service-Jobs, Service-Anfragen, Anmeldungen, Abonnements, Privatdarlehen und der Alterungsbericht - Darlehen, Darlehen Detail und Angebote - Knowledge Base zu Hause und Artikel - Karriere, Recht und Compliance - Einstellungen, Kontoeinstellungen, Integrationen, die Dokumentkategorienseite und die Markt- und Abonnementplanseiten Der Kalender vereint sein bestehendes Wechselfutter. Erfolge folgen der Das freischaltende Thema des Mitglieds.
· EmailService
Ein Abmelden per E-Mail wird honoriert, nicht fallen gelassen
Jede Groß- und Shared-Artikel-Nachricht bot unsubscribe@<sender's Domain. in seiner List-Unsubscribe-Header, aber nichts liest diese Mailbox - für einen Mieter es war nicht einmal unsere Domäne - so dass jede Opt-out auf diese Weise gesendet wurde verloren. - Die Mailto-Namen jetzt unsubscribe@hello.kamocrm.com ************ für jede Org, mit dem Token des Empfängers im Thema: **************** Die https One-Click-Link und List-Unsubscribe-Post sind unverändert. - POST /api/internal/unsubscribe/mail nimmt, was dort ankommt, wie berichtet durch den Seitenwagen des Mailservers. Es findet das Token in der Plus-Adresse, der Betreff (mit Re:, in Großbuchstaben, links URL-verschlüsselt, oder RFC 2047 kodiert) oder weitergeleitet Link, löst es genau wie die Präferenzseite tut, und Abmelden, dass Adresse für diese oder über das Opt-Out-Ledger (Quelle) "mailto", mit der Message-ID). Eine Kampagnenreihe, die noch darauf wartet, gesendet zu werden, ist gezogen, wie bei der Ein-Klick-Verbindung. Es zweimal zu tun, ändert nichts. - Eine Nachricht ohne Token, die jemanden ändert nichts: niemand ist abgemeldet durch eine Vermutung von der From Adresse, die jeder schreiben kann. Nichts wird jemals zurückgeschickt. Das Protokoll hält das Ergebnis, org, Absender-Domain und Message-ID, niemals das Thema oder Körper. - Es sitzt hinter InternalAuthFilter wie der Rest von /api/internal, weigert sich fordert über 64 KiB und probiert höchstens fünf Kandidaten-Token pro Nachricht aus.
· kamo-internal
Der Opt Out Tab und das Lead-Chip-Update live
Beide abonnieren ************ (EmailService und SecurityService veröffentlichen nach jeder engagierten Änderung; MediaService-Releis), so dass ein Empfänger abbezahlt, eine Bounce oder die Bearbeitung eines Kollegen auf einmal statt auf die nächste Ladung. Die org-ID ist der String Accessor, nie eine abgerundete Nummer. Eine halbgefertigte Änderung im Editor wird aufbewahrt, wenn sich die Adresse darunter bewegt, mit einem Hinweis. Drops auch die Breite Kappen der Registerkarte hatte auf einem ausgewählten und zwei Absätze.
· EmailService
Opt-out Bildschirme aktualisieren live, wenn jemand die Liste ändert
Das Ledger teilt OptOutChangePublisher nun nach jeder engagierten Änderung mit - einem Empfänger auf der Präzedenzseite, einem Bounce, einem Mitglied in Settings - und es veröffentlicht rt.org.{orgId'.eMail-opt-outs auf Core NATS für MediaService. Der Rahmen trägt keine Adresse; der Bildschirm wird erneut gelesen, was sein Betrachter sehen könnte.
· SecurityService
Die Opt-Out-Wechsel eines Leads aktualisiert die offenen Bildschirme live
Das Ledger hier erzählt OptOutChangePublisher nach der Änderung Commits, die veröffentlicht rt.org.{orgId'.eMail-opt-outs auf Core NATS (dieser Dienst JetStream ist Chat.-), übermittelt von MediaService. Keine Adresse im Rahmen.
· kamo-shared-library
Das Opt-Out- Ledger sagt, wenn die Liste einer Organisation geändert
Ein optionaler Zuhörer, der nach der Änderungsübermittlungsverpflichtungen erklärt wird, so dass die Bildschirme, auf denen die Liste die Liste zeigen, live aktualisieren können, anstatt einmal geladen zu werden. Es trägt nur die Organisation: Wer sich abgemeldet hat, ist hinter seinem eigenen Recht, also wird der Bildschirm wieder lesen, was sein Zuschauer sehen kann. Die bestehenden Konstrukteure sind unverändert.
· KlusterServices
Mail an unsubscribe@hello.kamocrm.com erreicht EmailService
Jede Groß- und Shared-Artikel-Nachricht bietet eine Abmeldung per E-Mail (Liste-Unsubscribe mailto), aber Mail an diese Adresse ging an Postmaster und wurde nie gehandelt. Jetzt postfix Hände genau diese Adresse, und abrufen+anything@ auf der gleichen Domain, zu einer kleinen Pipe, die die Nachricht, und eine neue Abmelde-Mail-Sidecar postet es zu EmailService /api/intern/unsubscribe/mail. EmailService findet das Token des Empfängers in das Thema (oder die Plus-Adresse oder der weitergeleitete Link) und Abmelden sie genau wie die Ein-Klick-Verbindung tut; alles ohne gültige Token ist akzeptiert und fallen gelassen. - Jede andere Adresse wird wie bisher geroutet: die eine regexp line-Match unsubscribe@hello.kamocrm.com sitzt über dem Postmaster catch-all, und transport_maps nennt nur die Pseudo-Domain, auf die es umschreibt. - Nichts wird je geprallt oder beantwortet: die Pfeife immer nur antwortet "geliefert" oder "verwenden Sie später", und Caps seine Spule bei 5000 Nachrichten. - Der Seitenwagen verwendet die Postfix-Bulk-Delivery-Events Kopie der internen geheim, optional, und nie verlässt, so kann es nicht halten postfix von Starten oder nehmen Sie die Hülse aus seinem Dienst.
· AIService
Der Vertriebsmitarbeiter ehrt die E-Mail-Opt-out-Liste der Organisation
Bevor eine E-Mail berühren Sie die ausgehende Tor jetzt fragt die Organisation E-Mail Opt-out-Ledger über die Adresse des Kontakts. Die Adresse ist die Kontaktstelle Schlüsselpunkte zu: die E-Mail des Leads für Blei:<uid', das Mitglied (oder seines Benutzers) für Mitglied:<id', und nur, wenn das Lead oder Mitglied zum gleichen gehört Organisation. Eine Adresse auf der Do-not-eMail-Liste, oder angehalten, wird abgelehnt, wie SUPPRESSED_OPT_OUT mit einem Grund, der EMAIL_OPTED_OUT_ORG_LIST startet. Es ist direkt nach dem eigenen Opt-out des Kontakts und vor allem geprüft Nebenbei, und es gilt auch für einen Kontakt der Agent nie berührt hat. Wenn die Liste kann nicht gelesen werden, auch die E-Mail wird abgelehnt (EMAIL_OPT_OUT_CHECK_FAILED): Agent Outreach ist unaufgefordert, so dass eine unbeantwortete Überprüfung darf nie zu einem senden. Andere Kanäle sind unverändert. Eine Opt-out aufgezeichnet durch recordOptOut für E-Mail, oder für jeden Kanal, jetzt legt auch die Adresse auf die Do-not-E-Mail-Liste der Organisation (Vernunft UNSUBSCRIBE, Quelle ai-agent-opt-out, Kontext AI_CONTACT mit der Kontakttaste), so jeder Absender in der Organisation und die Lead-Seite sehen es. Ledger liest und schreibt laufen in einer Transaktion von ihren eigenen und nie werfen. Die Ledger ist transaktional selbst, und eine Ausnahme innerhalb des Anrufers Transaktion würde die Prüfungsreihe der Ablehnung oder die des Kontakts selbst rückgängig machen Opt-out. Ein fehlgeschlagenes Schreiben wird protokolliert und das eigene Opt-Out des Kontakts steht immer noch. Das Buch wird als Bohne über seine drei Repositories erklärt. Seine Sonde für die neue Opt-out-Tabellen werden aus der primären DataSource erstellt, der einzigen dieser service has. com.kamo.z.shared.email schließt sich dem Projektarchiv-Scan an; die Bohne und Der Scan muss sich gemeinsam ändern.
· MediaService
Relay org ändern Ereignisse zu /topic/rt/org/{orgId'/{domain'
Autoren veröffentlichen rt.org.{orgId'.{domain' auf Core NATS nach einer erfolgreichen Änderung; jedes Pod gibt es an das Thema der Org weiter, also öffnen Sie Bildschirme, anstatt einmal zu laden. SUBSCRIBE wird gegen die Session org abgewiesen und der Client SEND zum Präfix wird abgelehnt.
· kamo-marketing
Eine versteckte, pro-Besucher Website Jagd für eine gedeckelte Förderung, und Signale, die Besucher in sie führen
Die Jagd: sieben Schlösser pro Besucher, erzeugt aus einem Samen und HUNT_SECRET, enciphered mit der vorherigen Antwort, versteckt auf einer Seite, die jede UTC bewegt Mitternacht, mit Zeittoren und einem Minimum von 72 Stunden. Staatenlose unterzeichnete Token; der Preis ist ein persönlicher Code von SecurityService aus einer Vorlage Förderung, abgeleitet aus dem Samen des Lösers, so dass ein Retry dauert nie eine Sekunde slot. scripts/check-hunt.ts spielt 400 Jagden bis zum Ende und verfehlt den Build wenn eine Stufe nicht von dem gelöst werden kann, was ein Lösungsmittel gezeigt wird. Der Weg in, für jemanden, der noch nie davon gehört hat: drei Signale. Ein Wort in den Kopier-Störungen der Landing-Seite; finden Sie es Namen der nächsten Seite (Preis zuerst) und Links dort, die nivelliert die nivellierte, eine Pille hält die Zählung Über Seiten, und die dritte öffnet die Jagd. Desktop-Ausstiegsabzugsabgrund einmal pro Sitzung, und "Start kostenlos" bei jedem Schritt. Jeder Schritt ist eine analytische Jagd-*-Ereignis. Alles fällt aus: keine Vorlage, keine Geheimnisse oder keine Codes links bedeutet nein Fußzeile, keine Signale und /api/Jagd-Antworten GESCHLOSSEN. /Junt heißt es Begriffe genau so, wie die Vorlage sie definiert.
· SecurityService
Ausgabe von persönlichen Single-Use-Codes aus einer Vorlagen-Promotion
Die Website kamocrm.com gibt jedem Löser einen eigenen Code, und nur die ersten N-Sedler überhaupt bekommen einen. Ein gemeinsamer Code konnte das nicht: der erster Löser, um es zu posten würde den Rabatt an alle übergeben. - PromotionCodeIssuer: eine INACTIVE Promotion ist die Vorlage; seine maxRedemptionen ist, wie viele persönliche Codes ausgegeben werden können. Slots werden genommen durch eine bedingte UPDATE, so dass zwei Repliken nicht über-Ausgabe. Ein Anrufer kann nennen Sie den Code, und fragen Sie erneut nach einem ausgegebenen Code gibt es ohne einen zweiten Slot einnehmen. - **************** auf dem Cluster internes Geheimnis. - Der öffentliche Werbe-Feed lässt Einwegcodes fallen, also einen persönlichen Code kann nie in der Homepage Helden aufgeführt oder beworben werden.
· EmailService
Eine echte Vorliebe Seite hinter jedem unsubscribe Link
Der Abmeldelink öffnete eine nackte Bestätigung-oder-Verlassenskarte. Jemand, der wollte nur weniger E-Mails hatte keine Möglichkeit, so zu sagen, und nichts sagte ihnen, warum sie wurden per Post geschickt, was immer wieder ankommen würde, oder dass ihre Wahl wurde zu Protokoll gegeben. Der Link öffnet nun eine Voreinstellungsseite für diese Adresse und den Absender. Die Entsendung von allem kommt zuerst und ist eine Presse. Danach, der Leser kann eine Art von Post ausschalten (wenn es mehr als eine gibt zu wählen, oder man ist bereits ausgeschaltet) oder pausieren alles für 30, 60 oder 90 Tage. Sobald sie abgemeldet sind, können sie mit einer Taste erneut abmelden, oder dem Absender sagen, warum er gegangen ist. Die Seite sagt, warum die E-Mail kam, was sie werden immer noch empfangen, und dass jede Änderung aufgezeichnet wird. Jede Änderung geht durch das Opt-Out-Ledger zusammen mit der Anfrage es kam von, so dass die Geschichte zeigt, die Wahl war der Leser. Das Öffnen der Seite zeichnet eine Ansicht auf und ändert nichts. Ein-Klick-Anfragen von Mail-Clients (RFC 8058) noch von allem abmelden, immer Antwort 200, und ziehen Sie immer noch eine aneinandergespannte Kampagnenreihe von seinem Senden. Ein Link dass Namen niemand die gleiche neutrale Seite auf jeder Route bekommt und nie erreicht das Ledger. Die Seite ist einfache HTML-Formulare ohne Script. Es wird in den Absendern gezeichnet Markenfarbe, angepasst, bis sie WCAG-Kontrast im Licht und dunkle Themen, und es funktioniert von 320px breit. Jede Antwort trägt ein strenge Inhaltssicherheitsrichtlinien, kein Referrer (der Token ist in der URL), No-Store, Noindex und ein Rahmenverbot. Rendering lebt in Unterdrückung/Seite: eine Ansichtsaufzeichnung, ein reiner Renderer, der testen und Vorschauen rufen direkt, und ein Dienst, der Token löst und Gespräche mit dem Ledger. Der Controller fährt nur Routen und setzt Header.
· kamo-internal
E-Mail Opt-out Chip und Panel auf der Lead-Seite
Neben der E-Mail-Adresse des Leiters gibt es jetzt einen Chip, der sagt, ob die Person kann per E-Mail verschickt werden: E-Mails erlaubt, Ausgeschalten aus allen E-Mails, Paused bis zu einem Datum, Einige E-Mails aus, oder keine E-Mail-Adresse. Es öffnet ein Panel, das die aktueller Zustand in Klartexten (wer hat ihn geändert, wann und warum), mit Schaltern für jede Art von E-Mail, ein "Opt out of all E-Mail"-Schalter, eine 30/60/90-Tage-Pause oder Ende eines, und die jüngste Geschichte mit der Anfrage Details hinter einem Knüpfer. Immer wenn eine Änderung die Person wieder erreichen lässt, wird die Notiz erforderlich, sagt, warum, und Speichern wartet darauf. Ein Mitglied, das es nicht ändern darf, ist erklärte, warum und sieht alles nur lesbar; bevor die Geschichtstabellen vorhanden sind Panel sagt so ruhig, anstatt zu scheitern. Die E-Mail schnelle Aktion fragt jetzt zuerst, wenn die Person aus allen E-Mails abgemeldet oder pausierte es, und lässt das Mitglied trotzdem für eine Eins-zu-eins-Antwort schreiben. Fügt die Proxy-Route für ************ hinzu Server-Feld und Code durch, so dass das Panel einen Fehler neben der rechten Seite setzen kann Eingabe.
· SecurityService
Sehen und ändern Sie die E-Mail-Opt-out eines Leads von der Leitung
Ein Mitglied, das eine Leitung bearbeitet, kann nun sehen, ob diese Person per E-Mail gesendet werden kann, und ändern, ohne die org-weite Opt-Out-Einstellungen Liste. GET ************ antwortet mit dem Zustand der Adresse auf das Opt-out-Ledger der Organisation, die zehn jüngsten Änderungen und die Themen eine Adresse kann aufhören. Wer es lesen kann, folgt dem Beispiel selbst (401/404/403 als zum Öffnen der Führung, Free-for-all-Leads enthalten). Ein Anrufer, dessen Blick auf die Lead Kontaktdaten ist maskiert bekommt die Adresse auf die gleiche Weise maskiert und keine IP, Browser oder Session Details zu den Historie-Reihen. PUT auf dem gleichen Weg ändert es. Es ist genau beim Editieren erlaubt Die Kontaktdaten der Führung sind erlaubt (der Bevollmächtigte oder EDIT_LEAD_CONTACT_INFO_OTHERS plus VIEW_UNASSIGNED_LEADS für eine nicht zugeordnete Leerleitung) und nie während der Adresse ist maskiert. Die Änderung wird als MANUAL aus "lead:<id", mit dem Mitglied, Adressen und Browser der Anfrage sowie ein Hasch der Sitzung. E-Mails zulassen wieder braucht eine Notiz, die das Ledger erzwingt (400 mit Feld "Kommentier"); bis die Historientabellen existieren eine Änderung mit 503 HISTORY_UNAVAILABLE verweigert wird. Jeder Änderung lässt auch eine Zeile auf der Lead-eigenen History-Tab. Das Ledger wird hier mit einer eigenen Schemasonde erklärt, wie es E-MailService tut.
· EmailService
Ein Org-Administrator kann die gesamte Opt-Out-Liste sehen und ändern
Einstellungen -" Email -" Opt Out hat jetzt seine API unter /api/email/opt-outs, hinter MANAGE_EMAIL_OPT_OUTS (God Bypasses): eine Zusammenfassung mit den letzten 30 Tagen, der Liste gefiltert nach Staat, Vernunft und Adresse, eine Adresse mit ihrer vollständigen Geschichte und Überall sonst erscheint es in der Organisation, der org-weiten Aktivität, einem CSV Export, und Änderungen und Notizen durch die Opt-out-Ledger gemacht. Jede Veränderung ist gegen das Mitglied, die Adresse des Kunden die Proxy übergeben, und ein hash ihrer Sitzung. Ids werden als Strings und Zeiten als ISO-8601 gesendet, als die Web-App erwartet. Bis die Historienstabellen existieren die Liste, Zusammenfassung, Adresse und Export noch Arbeit aus der Do-not-E-Mail-Liste allein, und eine Änderung antwortet 503 mit HISTORY_UNAVAILABLE statt halb gemacht. Die Schemasonde baut nun ihre Abfrage über die primäre Datenbank. Es war angesichts der einzigen Jdbc-Vorlage Bohne in diesem Dienst, der Mail-Server MySQL ein, so konnte es nie sehen, die Opt-out-Tabellen und jedes Mitgliedswechsel hätte abgelehnt worden.
· kamo-internal
Einstellungen --E-Mail -- Opt Out, die Do-not-E-Mail-Liste der Organisation
Jeder, der darum bat, keine E-Mails an einem Ort zu erhalten. Ein Mastkopf sagt, wie viele sind alle aus E-Mail und warum (unsubaktiviert, gesprungen, als Spam markiert, uns gebeten, zu stoppen), wie viele nur gestoppt einige Arten oder pausierten, und wie sich die Liste über dreißig Tage bewegte. Die Liste ist durchsuchbar und sfilterbar; daneben öffnet sich eine Adresse mit: was sie erhalten eine Zeile für alle E-Mail, eine pro Art von E-Mail, und eine Pause, gespeichert als ein Entwurf. Lassen Sie Post wieder jemanden erreichen braucht eine Notiz, die sagen, wer gefragt und wenn, weil diese Notiz ist die Aufzeichnung ihrer Zustimmung. bekannt als Lead, Kontakt, Kampagne sendet, Bewerbung, Stellenausschreibungen und KI Assistent Opt-out, die die Adresse teilen jede Veränderung als Zeitleiste: Was sich bewegte (vorher/nach), wer es getan hat und durch was, die Notiz und die Anfrage, von der sie kam (Netzwerkadresse, Forwarding-Kette, Browser, Sprache) Plus ein org-weites Aktivitätsfeed, das eine Adresse von Hand angibt, und einen CSV-Export. Gated by MANAGE_EMAIL_OPT_OUTS (ein Kind von MANAGE_EMAIL_SETTINGS), gespiegelt in RoleRightType.ts und RechteHierarchy.ts; der Reiter, der Menüeintrag und die Einstellungskarte erscheinen nur damit.
· kamo-internal
Quadrat, abgeschnebelte Knöpfe und ein 2px-Ecken-Daumen auf jedem Scrollbalken
Die vier Tasten der Bar (springen zu starten, Schritt zurück, Schritt vorwärts, springen zu Ende) sind jetzt 20px Quadrate mit harten Ecken, und der Daumen hält nur einen 2px Radius. Beide tragen eine ein-Pixel-besetzten Schräge - Licht entlang der Oberseite und links, dunkel entlang der Boden und rechts - in durchscheinend weiß und schwarz, so dass die gleiche Schräge sitzt auf dem Schiefer der Seite, eine Markenfarbe, die dunkle Palette des Terminals. Der einzelne Runden-Pfahl der Haut wird zu zwei Pixel-Radien, thumbRadius und ButtonRadius, weil "ein paar Pixel" ein absolutes. Der quadratische Schlüssel ist Geometrie statt Haut: Sie hält sich an einem kurzen Rinde (10x10 auf einem 72px-Streifen) und auf der Arcade-Haut, deren Aussehen sonst unverändert ist.
· EmailService
Jede Unterdrückungsprüfung und Sprungkraft geht durch das Opt-out-Bedger
SuppressionService fragt nun EmailOptOutLedger, so dass ein Check die Do-not-EMail-Liste sieht, pausiert und Themen gleichermaßen, und ein Sprung Landung in der gleichen Geschichte wie ein Abmelden. Anrufer nennen die Art von Post, die sie im Begriff sind zu senden: Kampagnen (materialisieren, Wiederherstellung, das späte Tor) fragen MARKETING_CAMPAIGNS, Artikel-Aktien über SHARED_ARTICLES. Bounces tragen die Antwort des Servers und die Kampagne in die Geschichte Reihe. OptOutSchemaProbe sagt dem Ledger, ob KamoInitializerService die beiden neuen geschaffen hat Tabellen noch; bis es hat, sendet Ehrungen die Liste allein, anstatt auf einer fehlenden Tabelle zu scheitern.
· kamo-shared-library
Ein Opt-out-Sedger, Themen, Pausen und eine Geschichte jeder Veränderung
Die Do-not-E-Mail-Liste könnte geschrieben, aber nicht gelesen, geändert oder erklärt werden. Dies fügt hinzu der eine Ort, von dem es gelesen und geschrieben wird, für jeden Dienst: email_optout_topics eine Adresse, die eine Art von E-Mail gestoppt, oder alles angehalten hat email_optout_events Insert-only-Historie: wer (Empfänger, Mitglied, System), von wo (Client IP, die gesamte X-Forwarded-For-Kette, Benutzeragent, Sprache, Host, Referer, Session-HHisch), warum (Ausrehung, Quelle, Notiz, Feedback), durch was (Kampagne, Blei) und der Staat vor und nach email_suppressions behält seine Bedeutung, so dass jeder Absender, der ihn bereits ehrt, es immer noch tut. EmailOptOutLedger antwortet "kann das gesendet werden" von allen drei und schreibt eine Geschichte Reihe pro Teil des Staates eine Änderung tatsächlich verschoben. Ein Mitglied, das Mail wieder erlaubt, muss sagen, warum; Hinweis ist der Rekord der Zustimmung. Bis die neuen Tabellen vorhanden sind, fällt das Ledger auf die Liste zurück allein und verweigert Änderungen kann es nicht aufzeichnen, anstatt scheitern sendet. Einfache Klasse, kein @Service: jeder Dienst scannt com.kamo, und einer ohne die E-Mail Depots würden nicht anfangen, es zu bauen. Jeder Dienst erklärt es mit @Bean. Auch MANAGE_EMAIL_OPT_OUTS (320), die org rechts für Einstellungen --E-Mail -- Opt Out, ein Kind von MANAGE_EMAIL_SETTINGS.
· kamo-internal
Outbound E-Mail-Hosts, senden Sie Fenster, pro Gastgeber Warm-up und der inszenierte Outbox
- Einstellungen - Plattform - Konfiguration gewinnt eine Outbound E-Mail Hosts Registerkarte, hinter der Plattform rechts MANAGE_OUTBOUND_EMAIL_HOSTS: die Hosts mit jeder Organisation geteilt und die gehaltenen für die Plattformorganisation, mit jeder Verbindungseinstellung, Verfügbarkeit, Verbindungsprüfungen, Test Senden und das Warm-up jedes Gastgebers. - Einstellungen - E-Mail - Bulk Email Sender wird auf GET Bulk-Provider/Übersicht umgebaut: die Rotation von die eigenen Hosts der Organisation und die Plattform (switchable pro Organisation), eine Round-Robin Ansicht, der Absender, ein Sendenfenster-Editor (werktags, mehrere Zeitbereiche, Übernachtungsbereiche, eigene Zeitzone oder die Organisation), und eine Klartext-Warm-up-Bericht pro Host. Die Aufwärm-Denk-Denkung nicht mehr abgeschaltet werden. - /marketing/email/outbox listet jede inszenierte E-Mail auf - komponiert nur, wenn ein Host sie aufnehmen kann - und storniert einzelne E-Mails, eine Auswahl oder alles, was übrig bleibt, mit rückgängig zu machen. Der Arbeitsbereich, Tempobanner und der Kampagnenredakteur verlinken darauf und lesen Sie die neue Kapazität pro Host. - Shared Host Editor mit Live Preflight (aufgelöste Adressen, Duplikat und Privatadresse Verweigerungen), die Outbound-Hosts und Outbox-API-Clients und der Empfängerstatus CANCELLED.
· EmailService
Mehrere Outbound Hosts pro Org, gesendet Round-Robin, jeder auf eigene Faust erwärmt, in einem Sendenfenster
Die Kampagnenpost einer Organisation hinterlässt jetzt eine beliebige Anzahl von Outbound-Hosts, eine Nachricht bei einem Zeit in Rotation, anstelle eines Bulk-Anbieter. - Hosts: eine Organisation eigenen (outboundHosts in seinem Bulk-Anbieter Blob) und die Plattform (platformOutboundHosts im Blob der Plattformorganisation), SHARED mit jeder Organisation oder PLATFORM_ONLY. Jede SMTP-Einstellung ist explizit: Sicherheit, SASL-Mechanismus, TLS-Überprüfung und Protokolle, HELO-Name, Briefumschlagssender, Timeouts, Stunden-/tägliche Begrenzungen, DSN, 8BITMIME, SOCKS. HostSessionFactory baut die Sitzung von ihnen; EmailSmtpService.sendVia sendet durch sie. - Derselbe Server wird nie zweimal hinzugefügt (gleicher Name oder eine gemeinsame Adresse, unabhängig vom Port oder Login), und der Host einer Organisation muss ein öffentlicher Server sein: private und in-cluster-Namen und Adressen werden auf Speichern und erneut vor jeder Verbindung verweigert. - Warm-up ist pro Host und immer eingeschaltet. WarmupService arbeitet an einem WarmupHandle; ein Plattform-Host hat einen Aufwärmung von jeder Organisation, die es verwendet. Neue Läufe beginnen am lokalen Start des Tages. - WarmupReleaser ist der einzige Absender: Round-Robin über die Gastgeber jeder Organisation, überspringen einen Host warten auf seinen Schlitz, an seiner Kappe, gebremst, an seiner eigenen Grenze oder Rückzieher nach dem Scheitern zu connect. Eine Verbindung, TLS oder ein Anmeldefehler zählt nicht mehr einen Versuch gegen den Empfänger. - Senden Sie ein Fenster pro Organisation (Tage, eine oder mehrere Ranges, eigene Zone oder die org's). WarmupPacer verteilt die Tagesmütze nur über die Öffnungszeit des Fensters. - Inszeniertes Outbox: /api/email/campaigns/outbox listet die Empfänger in der Warteschlange auf und löscht sie ab oder stellt sie wieder her. Ein stornierte Empfänger ist SUPPRESSED mit einer Notiz (kein Status DDL) und liest sich zurück als CANCELLED. - Endpunkte: ************ Plattform Hosts bei ************ hinter MANAGE_OUTBOUND_EMAIL_HOSTS. Der Ein-Gastgeber schreibt Antwort 410. - OutboundHostBackfill sät das k3m1 Relais als PLATFORM_ONLY Host und migriert One-Host Blobs. Kein Schema ändert sich.
· KlusterServices
Postfix-bulk akzeptiert jeden Absender von EmailService [Skip ci]
Das Relais ist jetzt eine Plattform Outbound-Host, dass jede Organisation Kampagne Mail gehen kann durch, wie was auch immer von dieser Organisation sendet als. Nur der Nullsender wird noch abgelehnt, mit einem 4xx. Die Reichweite ist unverändert: mynetworks und die NetworkPolicy beschränken es auf EmailService-Pods. Direkt auf Angewiesen (kubectl apply -f ****************
· kamo-shared-library
MANAGE_OUTBOUND_EMAIL_HOSTS, die Outbound-E-Mail-Hosts der Plattformkonsole
Eine Plattform rechts für die ausgehende E-Mail-Hosts Kampagne Mail geht durch: die Gastgeber geteilt mit jeder Organisation und denen, die für die Plattformorganisation gehalten werden, ihre Referenzen, Verfügbarkeit und Aufwärmen. Erzwungen durch den PlatformOutboundHostsController von EmailService PlatformRightsResolver. Angelegt, so dass kein bestehendes Recht neu nummeriert wird.
· kamo-internal
Löschen, Filtern und Ausschalten NoReply Outbound-Reihen
Die Audit-Seite erhält eine Subsystem-Spalte und Filter, Checkbox-Auswahl mit "Alle auswählen" und "alle Übereinstimmungen auswählen", und löscht für eine Zeile, die ausgewählten Zeilen, alles passend zu den Filtern, oder alles, jede hinter einer Bestätigung, dass die Tabelle die Zeilen entfernt werden. "Recording & Retention" schaltet die Aufnahme jedes Subsystems ein- oder aus. und legt fest, wie lange Reihen gehalten werden. Die Aufforderung jedes Löschen wird, und wie das Raster-Auswahlmodell ist lesen, live in ************ mit eigenen Tests.
· EmailService
Das NoReply-Ledger kann von einem Subsystem gefiltert, beschnitten und gesagt werden, was zu protokollieren ist
Jede Zeile benennt nun das Subsystem, das sie gesendet hat, und für eine Vorlage senden, die Vorlagen-Taste. EmailTemplateService und der Kampagnen-Sender öffnen ein NoReplyOutboundSource-Fernersatz rund um ihre SMTP senden; alles andere ist UNATTRIBUTED. NoReplySubsystem kartografieren die kanonischen Vorlagenschlüssel zu Subsysteme und ein Test scheitert, wenn eine kanonische Vorlage auf keine Karten abbildet. Löschungen gehen an die Tabelle selbst durch NoReplyOutboundLedger: eine Zeile, bis zu 1000 ausgewählte Zeilen, jede Zeile passend zu den Filtern der Liste oder Volleded (TRUNCATE), das mit bestätigenAll gefragt werden muss. Bulk löscht laufen in Stücken von 500. NoReplyOutboundSettings speichert einen Aufnahmeschalter pro Subsystem und Retention (30 Tage standardmäßig, 0 behält Zeilen bis gelöscht), cached für 15 Sekunden pro Hülse. NoReplyOutboundRetentionSweep säubert stündlich auf einem pod. Alle neuen Endpunkte sind nur von Gott, wie die Liste.
· InitializerService
Der einzigartige (Kampagne, Adresse) Index, für eine frische Umgebung
EmailService erstellt ************ auf jedem Start; DDL auf diesem Cluster gehört hier statt. Idempotent, auto-verpflichtet (YugabyteDB baut Indizes online), und Duplikate werden gezählt und protokolliert, nie gelöscht - eine kontaktierte Zeile ist die permanente Aufzeichnung einer Kampagne eines Adresse. EmailService prüft nun nur noch den Index mit diesem Namen.
· kamo-internal
Der Kampagnen-Redakteur schreibt Kante zu Rand, verschmelzen Tokens in ihrer eigenen Spalte
Das Thema sitzt unter dem Kampagnentitel und dem Publikum neben dem Status-Chip, so dass die Compose Schritt ist die E-Mail-Körper allein, füllen die Mitte der Seite, mit den Merge-Token in einer Spalte auf das Recht. Nichts spart für sich, so dass die Seite markiert jetzt bearbeitet den Server nicht gesehen hat und fragt vor dem Verlassen würde sie verwerfen; TemplateInlineEditor berichtet, dass der eigene Körper des Mitglieds bearbeitet auseinander von Quills Last-Time-Normalisierung, so dass Marke nicht durch bloßes Öffnen einer Kampagne erhöht wird.

Euer Universum wartet.
Fügen Sie Produkte hinzu, wann immer Sie möchten – keine Migration, keine neuen Anmeldungen.
Für immer kostenlos – keine Kreditkarte erforderlich