Changelog
Qué hay de nuevo.
Cada mejora de la plataforma, a medida que se envía.
· kamo-internal
"Todas las pistas / cuentas / aplicaciones" en una campaña, a cualquier tamaño
Cada caja de identificación en el editor de la campaña ahora tiene una caja "All"... a su lado. Apegada, la caja se mete en un panel en vivo para todos de ese tipo el miembro inscrito puede ver, con cuántas direcciones se refiere a una pequeña organización, inferida por una grande ("4,9 millones de más del 2%") y refinando en su lugar mientras EmailService anuncia una mejor cifra. Una caja que el miembro no puede usar dice por qué. Nada en el editor tiene toda la lista: - La lista guardada es una rejilla desplazada por servidor (búsqueda por dirección, filtro por estado, filas de marca para tomar off), y Save envía los cambios de la página como rebanadas con una barra de progreso, no en la lista. - "Previsualización como" es una búsqueda a través de las nuevas direcciones de esta página, la lista guardada y cada una de las mareadas audiencia, una página a la vez, en lugar de un menú de las primeras cincuenta direcciones cargadas en el navegador. - El resumen del destinatario añade la lista, lo que Ahorra agregará y cada público, y dice claramente que Nadie es enviado por correo electrónico dos veces y opt-outs salen como se envían. - Una campaña de envío muestra lo lejos que se ha reunido cada público. El outbox escenificado, el resumen outbox del espacio de trabajo y la rebanada outbox del editor ya no encuestan: Releen en los marcos de progreso del enchufado de las campañas.
· EmailService
Una campaña puede ir a cada pista, cuenta o aplicación que un miembro puede ver
"Todas las pistas / cuentas / aplicaciones" es una regla, no una lista. Se almacena con la campaña (la Blob de proveedor a granel, campañaAudiencias - no DDL), funciona con el acceso de quien lo establezca o presiona Enviar, y es recogido por el despachador barriendo sólo unos pocos miles de destinatarios antes de lo que el Los anfitriones salientes pueden tomar, por lo que una audiencia de miles de millones nunca existe como lista en ninguna parte. - Alcanzar: exactamente lo que el miembro podía leer desenmascarado - la regla de las pantallas principales (propiminaciones propias; otros". con View información de contacto de otros; no asignada también necesita Ver Líderes no asignados o de forma gratuita producto), cuentas con Ver Cuentas que acordaron comercialización, aplicaciones con un oleoducto. - Lectura: pequeñas organizaciones a través de su propio índice por id; grandes por barrido de hash-bucket de la tabla (yb-hash-code en la tecla principal, atrapada con una pista) - el único rango estos Las mesas duras pueden buscar. - Conteo: exacto para organizaciones pequeñas, inferida para grandes de cubos de hachís al azar con un Periócilo rango, refinado en vivo a través de NATS (email-audience) y en caché por alcance en Redis. - Las filas reunidas son destinatarios ordinarios, opt-out comprobados, insertados EN CONFLICT DO NOTHING (nunca un Dirección dos veces) y marcada tan desencaño una fuente recupera sólo lo que escenió. Una campaña no es terminado mientras su público sigue siendo reunido; cancelar todo lo que queda lo detiene. - La lista de envíos se llama (/receptores/página, una búsqueda en el índice de direcciones) y se cambia en rebanadas (/Recipientes/apéndices, / receptores/elimino); eliminar y duplicar ya no la cargar y liberar los tiempos se asignan una página a la vez. - Vista previa: /campañas/audiencia/baves páginas una audiencia con un vistazo de identificación y una búsqueda en caja de tiempo. - Los inquilinos de PHI consiguen el rastro de acceso por disco de la red principal para cada pista que una audiencia lee.
· EmailService
La página de preferencia en cada idioma que el producto habla
La página detrás de cada enlace de darse de baja sólo hablaba inglés. Ahora habla. todos los 22 idiomas producto UI barcos: inglés, chino, hindi, español, Francés, árabe, bengalí, ruso, portugués, indonesio, alemán, japonés, Swahili, turco, tamil, vietnamita, coreano, italiano, tailandés, polaco, Ucraniano y rumano. - Cada frase que la página dice que ahora vive en un paquete de mensajes, ************* con el inglés como fuente y la queja por falta. Los números toman la forma plural correcta para cada idioma, y las fechas están escritas a la manera del propio idioma (UTC). - El idioma es elegido por petición: un parámetro lang gana, luego el Acepta-Language del navegador (valores de calidad honrados, pt-BR cae de nuevo a pt), entonces inglés. Un idioma que el lector elige estancias escogidas Cada forma y redireccionar. Los conjuntos de páginas de la página "html lang", Content-Language y Vary, y enumera cada idioma, nombrado en sí mismo, en la parte inferior como simple enlaces. - El árabe se coloca de derecha a izquierda: sur="cril", lógica CSS, un espejo cambio, y las propias palabras de la organización (nombre, tema, dirección) mantenidas en su propia dirección. Esas palabras nunca se traducen. - En pantallas anchas la página ahora utiliza el ancho completo: para quién es y por qué en un lado, las opciones a su lado en columnas, las notas y el pie de página abajo. Bajo 720px es la misma columna que antes. - Nada más cambia: aún se escapa cada valor (texto traducido alrededor de ella también), sin guión, las mismas cabeceras cerradas, GET todavía nunca cambia cualquier cosa, y un vínculo que nombra a nadie todavía obtiene lo mismo página neutral, ahora en el idioma del lector. Pruebas comprueban que cada paquete tiene exactamente las llaves inglesas y marcadores de posición y una sucursal para cada forma plural de su idioma, y cobertura la negociación del idioma, la salida derecha a la izquierda, las fechas, la fuga, y la lenguaje sobreviviendo a un salvamento y su redireccion.
· kamo-internal
Páginas refetch en org cambiar eventos en lugar de cargar una vez
Cada escritura exitosa a través de forwardToApi ahora publica rt.org.Id..domain. en el núcleo NATS (el dominio es el primer segmento de la ruta de backend, saltándose la seguridad/). MediaService la transmite a /topic/rt/orgId./Ed./domain, y utilizaOrgChanges Se suscribe el enchufe compartido, coales ráfagas y se dispara de nuevo tras un Reconecta. Las rutas de pérdida, facturación y oauth-config, que no pasan forwardToApi, publicárselo. Páginas que cargaron una vez ahora reestablecen silenciosamente cuando su dominio cambia: no flash esqueleto, y nunca sobre la entrada invertida sin guardar. - Cuentas: asignar, y la vista de cuenta (visión general, historia, pistas, miembros, notas, órdenes) - Notas - Comercio: órdenes, acuerdos, reservas, contratación, peticiones, puestos de trabajo, solicitudes de servicios, inscripciones, suscripciones, préstamos personales y el informe sobre envejecimiento - Préstamos, detalles de préstamo y ofertas - Base de conocimiento y artículo - Carreras, legales y cumplimiento - Configuración, configuración de cuenta, integraciones, la página de la categoría de documentos, y las páginas del plan de mercado y de suscripción El calendario unincias de cambio existente. Logros siguen a la el tema de desbloqueo del miembro.
· EmailService
Una sucríe por correo electrónico es honrada, no caída
Cada mensaje a granel y de artículo compartido ofrecía el dominio de suscribe.sender. en su cabecera de inscripción de la Lista, pero nada lee ese buzón - para un inquilino Ni siquiera era nuestro dominio - así que cada opt-out enviado de esa manera se perdió. - El correo a ahora se llamac acá suscríbe.hello.kamocrm.com **************** para cada org, con el token del destinatario en el tema: **************** El enlace https de un clic y el listado-Unsubscribe-Post no cambian. - POST /api/internal/unsubscribe/mail toma lo que llega allí, según se informó por el sidecar del servidor de correo. Encuenca la ficha en la dirección plus, la sujeto (con Re: en mayúsculas, codificados URL izquierdos, o codificados RFC 2047) o un enlace enviado, lo resuelve exactamente como lo hace la página de preferencia, y cúyae esa dirección de la organización a través del libro de exclusión voluntaria (fuente "mailto", con el Mensaje-ID). Una fila de campaña que aún está a la espera de ser enviada es tirado, como con el enlace de un clic. Hacerlo dos veces no cambia nada. - Un mensaje sin ficha de que nombra a alguien no cambia nada: nadie es darse suscrita por una conjetura de la dirección From, que cualquiera puede escribir. Nunca se devuelve nada. El tronco mantiene el resultado, org, dominio de remitente y Mensaje-ID, nunca el sujeto o el cuerpo. - Se encuentra detrás de InternaAuthFilter como el resto de /api/internal, se niega solicita más de 64 KiB, e intenta como mucho cinco fichas de candidatos por mensaje.
· kamo-internal
La pestaña Opt Out y la actualización de fichas principales en directo
Ambos se suscriben a ************* (EmailService y SecurityService publish después de cada cambio comprometido; MediaService relays), por lo que un destinatario se desconchó, un rebote o la edición de un colega se muestra a la vez en vez de en la siguiente carga. El org id es el accesor de cuerda, nunca un número redondeado. Se mantiene un cambio a medio hecho en el editor cuando la dirección se mueve debajo de ella, con una nota que lo dice. También deja caer las tapas de anchura que la pestaña tenía en un selecto y dos párrafos.
· EmailService
Pantallas Opt-out se refresca en vivo cuando alguien cambia la lista
El libro principal ahora le dice a OptOutChangePublicer después de cada cambio comprometido - un destinatario en la página de preferencias, un rebote, un miembro en Ajustes - y que publica rt.org..mail-opt-outs en NATS para MediaService para relevo. El marco no tiene dirección; la pantalla reelea lo que su espee puede ver.
· SecurityService
El cambio de exclusión de una pista refresca las pantallas abiertas en directo
El libro de alaquí aquí le dice a OptOutChangePublicer después de las comisiones de cambio, que publica rt.org.org..email-op-touts en NATS básico (el flujo JetStream de este servicio es chat.), retransición por MediaService. No hay dirección en el marco.
· kamo-shared-library
El libro de exclusión dice que cuando la lista de una organización cambió
Un oyente opcional, contado después de que el cambio se compromete, por lo que las pantallas que muestran la lista pueden refrescarse en vivo en lugar de cargar una vez. Lleva sólo a la organización: quién optó por salir está detrás de su propio derecho, por lo que la pantalla reelea lo que su espesante pueda ver. Los constructores existentes no han cambiado.
· KlusterServices
Mail to cancele.hello.kamocrm.com llega a EmailService
Cada mensaje a granel y de artículo compartido ofrece un suscripción por correo electrónico (Lista-Unsubscribe mailto), pero el correo a esa dirección fue a postmaster y Nunca se actuó. Ahora postfiel manos exactamente esa dirección, y desinscribirlo en el mismo dominio, a una pequeña tubeza que se enreda el mensaje, y un nuevo coche lateral de correo electrónico lo publica a EmailService's /api/internal/unirsubscribe/mail. EmailService encuentra la ficha del destinatario en el sujeto (o la dirección más, o el enlace reenviado) y darse de baja exactamente como lo hace el enlace de un solo clic; cualquier cosa sin un símbolo válido es aceptado y caydo. - Todas las demás direcciones se enrutan como antes: la línea de regexp que coincidía cúrmate.hello.kamocrm.com se encuentra por encima de la captura de postmaster, y transport-maps nombra sólo el pseudodominio al que se reescribe. - Nunca se rebota ni se responde nada: la tubería sólo responde "entregado" o "intentar más tarde", y tapa su bobinado en 5000 mensajes. - El coche lateral reutiliza la copia postfix-bulk-entrega-ventos-ventos de la secreto, opcionalmente, y nunca sale, por lo que no puede evitar la postfijo de a partir o sacar la cápsula de su servicio.
· AIService
El agente de ventas honra la lista de opt-out de correo electrónico de la organización
Antes de cualquier correo electrónico tocar la puerta de salida ahora pregunta el correo electrónico de la organización opt-out libro sobre la dirección del contacto. La dirección es la que se contacta. puntos clave en: el correo electrónico del plomo: .uid, el del miembro (o el de su usuario) para el miembro: id, y sólo cuando ese plomo o miembro pertenece al mismo organización. Se rechaza una dirección en la lista de no correos electrónicos, o pausadas, como SUPPRESSED-OPT-OUT con una razón que comienza EMAIL-OPTED-OUT-ORG-LIST. Es comprobado justo después de la opción de exclusión del contacto y por delante de todo incidental, y se aplica incluso a un contacto que el agente nunca ha tocado. Si la lista no se puede leer el correo electrónico también se rechaza (EMAIL-OPT-OUT-CHECK-FAILED): agente de divulgación no es solicitado, por lo que un cheque sin respuesta nunca debe convertirse en un Envía. Otros canales no han cambiado. Un opt-out grabado a través de recordOptOut para correo electrónico, o para cada canal, ahora también pone la dirección en la lista de la organización no-email (razón UNSUBSCRIBE, source ai-agent-opt-out, context AI-CONTACT con la tecla de contacto), Así que todos los remitentes de la organización y la página principal lo ven. Ledger lee y escribe corrido en una transacción propia y nunca tira. El El libro mayor es transaccional, y una excepción dentro de la persona que llama transacción haría retroactivar la fila de auditoría de la negativa o la propia opt-out. Se registra una escritura fallida y el propio opt-out del contacto sigue en pie. El libro mayor es declarado como un frijol sobre sus tres repositorios. Su sonda para el nuevas mesas de exclusión se construyen a partir de la página principal DataSource, la única esta servicio tiene. com.kamo.z.shared.email se une al escaneo del repositorio; el frijol y El escaneo debe cambiar.
· MediaService
Relay org cambia de evento a /topic/rt/org/orgIdá/domain.
Los escritores publican rt.org.-orgId-.domain- en el núcleo NATS después de un cambio exitoso; cada vaina lo transmite al tema de la org tan abierto de las pantallas refetch en lugar de cargar una vez. SUBSCRIBE se verifica con la sesión org, y el cliente Enviar al prefijo se le niega.
· kamo-marketing
Una búsqueda escondida, porvistor de un sitio oculto para una promoción con tapa, y señales que llevan a los visitantes a ella
La cacería: siete cerrajas por visitante, generadas a partir de una semilla y HUNT-SECRET, Enciprado con la respuesta anterior, escondida en una página que mueve cada UTC medianoche, con puertas de tiempo y un mínimo de 72 horas. fichas firmadas por el Estado; el premio es un código personal emitido por SecurityService de una plantilla promoción, derivada de la semilla del solucionador para que un retenimiento nunca tome un segundo ranura. scripts/check-hunt.ts juega 400 cacerías hasta el final y falla la construcción si cualquier etapa no se puede resolver de lo que se muestra un solucionador. El camino, para alguien que nunca ha oído hablar de ello: tres señales. Una palabra. en las fallas de la página de destino; encontrando que nombra la siguiente página (Pricar primero) y enlaces allí, el enlace de nave a él brilla, una píldora mantiene el conteo a través de las páginas, y la tercera abre la cacería. Intención de salida de escritorio una vez por sesión, y "inicio gratis" a cada paso. Cada paso es un evento de caza de análisis-*. Todo falla cerrada: sin plantilla, sin secretos o sin códigos que queden significa no línea de pies, sin señales y /api/hunt respuestas CLOSED. /caja dice el términos exactamente como la plantilla los define.
· SecurityService
Etaque códigos personales de un solo uso de una plantilla de promoción
El sitio kamocrm.com caza las manos cada solucionador un código propio, y sólo los primeros solucionadores de N alguna vez consiguen uno. Un código compartido no podía hacer eso: el Primero solucionador para publicarlo entregaría el descuento a todos. - PromotionCodeIssuer: una promoción INACTIVE es la plantilla; maxRedemptions es cuántos códigos personales se pueden emitir. Las ranuras se llevan por una actualización condicional por lo que dos réplicas no pueden exagerar. Un llamante puede nombre el código, y pedir de nuevo un código emitido lo devuelve sin tomar una segunda ranura. - ************* en el grupo secreto interno. - Las promociones públicas arroja códigos de un solo uso, así que un código personal nunca se puede enumerar o anunciar en el héroe de la página principal.
· EmailService
Una verdadera página de preferencia detrás de cada enlace de cancelación de suscribir
El enlace de cancelación de suscripción abrió una tarjeta de confirmación o licencia. Alguien que sólo quería menos correos electrónicos no tenía forma de decirlo, y nada les dijo por qué estaban siendo enviados por correo, lo que seguiría llegando, o que su elección se mantuvo en el registro. El enlace abre ahora una página de preferencia para esa dirección y remitente. La insuscripción de todo es lo primero y es una prensa. Después de eso, el lector puede desactivar un tipo de correo (cuando hay más de uno elegir entre, o uno ya está apagado) o pausar todo por 30, 60 o 90 días. Una vez dados de baja pueden volver a suscribirse con un botón, o dile al remitente por qué se fueron. La página dice por qué llegó el correo electrónico, qué seguirán recibiendo, y que cada cambio se registra. Cada cambio pasa por el libro de exclusión junto con la petición venía de eso, así que la historia muestra que la elección era propia del lector. Abrir la página registra una vista y no cambia nada. Solicitudes de un clic de clientes de correo (RFC 8058) todavía se suscriben de todo, siempre Responde 200, y aún así tirar de una fila de campaña en cola de su envío. Un enlace que nombra a nadie tiene la misma página neutral en cada ruta y nunca llega al libro. La página es formas HTML sencillas sin script. Está divial en el remitente. color de marca, ajustado hasta que cumpla con el contraste de WCAG tanto en la luz como en Temas oscuros, y funciona a partir de 320px de par en par. Cada respuesta conlleva un estricta política de seguridad de contenido, sin referencia (el token está en la URL), sin tienda, sin índice y una prohibición de marco. Rendering vive en la supresión/página: un registro de vista, un renderizado puro que pruebas y previsualiza la llamada directamente, y un servicio que resuelve fichas y habla con el libro mayor. El controlador sólo rutas y coloca encabezados.
· kamo-internal
Correo electrónico opt-out chip y panel en la página principal
Además de la dirección de correo electrónico del líder, ahora hay un chip que dice si la persona puede ser enviado por correo electrónico: Correos electrónicos permitidos, Ocurrido fuera de todo el correo electrónico, Pausado hasta una fecha, Algunos correos electrónicos desactivados, o No hay dirección de correo electrónico. Abre un panel que explica el estado actual en palabras llanos (quién lo cambió, cuándo y por qué), con interruptores para cada tipo de correo electrónico, un interruptor de "salir de todo el correo electrónico", una pausa de 30/60/90 días o Termina uno, y la historia reciente con los detalles de la petición detrás de un contrasillo. Cada vez que un cambio dejaba que el correo electrónico llegara a la persona de nuevo, la nota se convierte en necesario, dice por qué, y ahorra que lo espere. Un miembro que puede no cambiarlo es contar por qué y ver todo solo en lectura; antes de que las tablas de la historia existan el El panel lo dice con calma en lugar de fracasar. La acción rápida por correo electrónico ahora pregunta primero cuando la persona optó por no enviar todo el correo electrónico o lo pausó, y deja que el miembro escriba de todos modos para una respuesta uno a uno. Añade la ruta de poder para ************* pasar el el campo y el código del servidor a través para que el panel pueda poner un error junto a la derecha la aportación.
· SecurityService
Vea y cambie el opt-out de un lider. de la dirección
Un miembro que trabaja una pista ahora puede ver si esa persona puede ser enviada por correo electrónico, y cámbiala, sin la lista de ajustes de exclusión de org. GET ********** respuestas con el estado de la dirección en el libro de exclusión de la organización, sus diez cambios más recientes y los temas una dirección puede detenerse. Quién puede leerlo sigue la propia ventaja (401/404/403 como para abrir el liderado, pistas libres para todos incluidos). Un llamante cuya vista de la Los datos de contacto de la pista se enmascaran consigue la dirección enmascarada de la misma manera y no IP, navegador o detalles de sesión en las filas de historia. PUT en el mismo camino lo cambia. Se permite exactamente al editar esto Los datos de contacto del plomo están permitidos (el cesionario, o EDIT-LEAD-CONTACT-INFO-OTHERS más VIEW-UNASSIGNED-LEADS para una pista no asignada) y nunca mientras la dirección está enmascarado. El cambio se registra como MANUAL de "límite:id", con el miembro, las direcciones y el navegador de la solicitud, y un hash de la sesión. Permitir correo electrónico de nuevo necesita una nota, que el libro mayor impone (400 con "comentario") de campo; hasta las tablas de historia existen un cambio se rechaza con 503 HISTORIA-UNAVAILABLE. Cada uno El cambio también deja una fila en la propia ficha de la Historia del líder. El libro mayor se declara aquí con su propia sonda de esquema, como lo hace EmailService.
· EmailService
Un administrador de org puede ver y cambiar toda la lista de exclusión
Configuraciones -------- Opt Out ahora tiene su API bajo /api/email/opt-outs, detrás MANAGE-EMAIL-OPT-OUTS (suerte de dios): un resumen con los últimos 30 días, la lista filtrado por estado, razón y dirección, una dirección con su historia completa y en todas partes de lo que aparece en la organización, la actividad de toda la zona, un CSV exportación, y cambios y notas hechas a través del libro mayor de exclusión. Cada cambio es registrada contra el miembro, la dirección del cliente que el representante pasó, y a hashh de su sesión. Los dias se envían tan cuerdas y tiempos como ISO-8601, como el la aplicación web espera. Hasta que existan las tablas de historia, la lista, el resumen, la dirección y la exportación todavía trabajar solo en la lista de correo electrónico de hacer, y un cambio responde 503 con HISTORIA-UNAVAILABLE en lugar de estar a la mitad. La sonda de esquema ahora construye su consulta sobre la base de datos primaria. Era ser dado el único frijol JdbcTemplate en este servicio, el MySQL del servidor de correo, para que nunca podría ver las mesas de exclusión y el cambio de cada miembro tendría se le denegó.
· kamo-internal
Configuraciones --- Correo electrónico - Opt Out, la lista de la organización no-e-email list
Todos los que pidieron no ser enviados por correo electrónico, en un solo lugar. Un masajista dice cuántos están fuera de todo email y por qué (sin suscribir, rebotado, marcado como spam, nos pidió que nos detengiéramos), cuántos se detuvieron solamente algunos tipos o se detuvo, y cómo la lista se movió durante treinta días. La lista es buscable y filtrable; una dirección se abre a su lado con: lo que reciben una fila para todo el correo electrónico, uno por tipo de correo, y una pausa, guardado como un borrador. Dejar que el correo llegue a alguien de nuevo necesita una nota diciendo quién preguntó y cuando, porque esa nota es el acta de su consentimiento. conocido como el plomo, el contacto, los envíos de campaña, la solicitud de empleo, las alertas de empleo y la IA asistente opt-out que comparte la dirección historia cada cambio como una línea de tiempo: lo que se movió (antes/despuedo), quién lo hizo y a través de qué, la nota, y la petición que vino de (dirección de red, cadena de reendague, navegador, lenguaje) Además de un alimento de actividad para toda lana, añadiendo una dirección a mano, y una exportación de CSV. Cedido por MANAGE-EMAIL-OPT-OUTS (un niño de MANAGE-EMAIL-SETTINGS), espejada en RoleRightType.ts y derechosHierarchy.ts; la pestaña, la entrada del menú y la tarjeta de configuración solo aparecen con ella.
· kamo-internal
Plaza, botones bisecados y un pulgar de 2px en cada barra de desplazamiento
Los cuatro botones de la barra (salto para empezar, dar un paso atrás, dar un paso al frente, saltar al final) son ahora 20px cuadrados con esquinas duras, y el pulgar mantiene sólo un radio de 2px. Ambos llevan un bisel insexel de bisel - luz a lo largo de la parte superior y izquierda, oscura a lo largo el fondo y la derecha - en blanco translúcido y negro, por lo que el mismo bisel se sienta en la pizarra de la página, un tinte de marca, la paleta oscura del terminal. La fracción de un solo redondeo de la piel se convierte en dos radios de píxel, pulgarRadius y botónRadius, porque "un par de píxeles" es un absoluto. La clave cuadrada es geometría en lugar de piel: se aferra a una barra corta (10x10 en una tira de 72px) y en la piel de arcade, cuya apariencia no cambia.
· EmailService
Cada comprobación de supresión y rebote pasa por el libro de exclusión
SupresiónService ahora pregunta EmailOptOutLedger, por lo que un chequeo ve la lista de no-e-email, pausas y temas por igual, y un rebote aterriza en la misma historia que darse de baja. Los llamantes nombran el tipo de correo que están a punto de enviar: campañas (materializar, restaurar, la puerta tardía) preguntan por FECHA-CAMPAIGNS, artículo compartido sobre SHARED-ARTICLES. Los rebotes llevan la respuesta del servidor y la campaña en la fila de la historia. OptOutSchemaProbe dice al libro mayor si KamoInitializerService ha creado los dos nuevos Mesas todavía; hasta que lo haya hecho, el envío de la lista solo en lugar de fracasar en una mesa perdida.
· kamo-shared-library
Un libro de adonos, temas, pausas y una historia de cada cambio
La lista de correo electrónico podría escribirse pero no leer, cambiar o explicar. Esto añade el único lugar en el que se lee y se escribe, para cada servicio: email.optout.topics una dirección que detuvo un tipo de correo, o pausó todo email.optout-events insertar solo la historia: quién (receptor, miembro, sistema), desde dónde (cliente IP, toda la cadena X-Forwarded-For, agente de usuario, idioma, anfitrión, árbitro, hachís de sesión), por qué (razón, fuente, nota, retroalimentación), a través de qué (campaña, plomo), y el estado antes y después emails-suppressions mantiene su significado, así que cada remitente que ya honra lo hace. EmailOptOutLedger responde "que esto sea enviado" de los tres y escribe una fila de historia por parte del estado un cambio realmente se movió. Un miembro que permita el correo de nuevo debe decir por qué; que La nota es el acta del consentimiento. Hasta que las nuevas tablas existen el libro de vuelta a la lista solo y rechaza los cambios que no puede registrar, en lugar de fallar los envíos. Clase simple, no un servicio: cada servicio escanea com.kamo, y uno sin el correo electrónico Los repositorios no empezarían a construirlo. Cada servicio lo declara con Bean. También MANAGE-EMAIL-OPT-OUTS (320), el org derecho para Configuración --------------Omail -- Opt Out, un niño de MANAGE-EMAIL-SETTINGS.
· kamo-internal
Alojados por correo electrónico saliente, enviar ventanas, calentamiento por huésped y la bandeja de salida escenizada
- Configuración de la plataforma - Configuración gana una pestaña de Afidos de Correos E-Auntamiento, detrás de la plataforma Efecto MANAGE-OUTBOUND-EMAIL-HOSTS: los anfitriones compartieron con todas las organizaciones y los mantenidos para la organización de la plataforma, con cada configuración de conexión, disponibilidad, controles de conexión, La prueba envía y el calentamiento de cada huésped. - Configuraciones y Email Avión Avión Sender se reconstruye en GET bulk-provider/overview: la rotación de los propios anfitriones de la organización y la plataforma (intercambiable por organización), una redonda redonda vista, el remitente, un editor de ventanas de envío (días de semana, varios rangos de tiempo, rangos de pernoctación, propio huso horario o de la organización), y un informe de calentamiento en lenguaje sencillo por huésped. La lata de calentamiento ya no se apagó. - /marketing/email/outbox lista cada correo electrónico escenificado compuesto sólo cuando un host puede tomarlo y cancela correos electrónicos individuales, una selección, o todo lo que queda, con deshacer. El espacio de trabajo, el El banderín de la campaña y el editor de la campaña se enlazan con él y leen la nueva capacidad por huésped. - Editor de host compartido con prevuelo en vivo (diciones resueltas, duplicación y dirección privada negativas), los clientes de la API saliente y outbox API, y el estatus de destinatario CANCELLED.
· EmailService
Varios huésmos de ida por org, enviados round-robin, cada uno calentado por su cuenta, dentro de una ventana de envío
El correo de una organización de campaña ahora deja a través de cualquier número de anfitriones salientes, un mensaje en un tiempo en rotación, en lugar de un proveedor a granel. - Hosts: una organización (outboundHosts en su mancha de proveedores a granel) y la plataforma (plataformaOutboundHosts en la mancha de la organización de la plataforma), SHARED con cada organización o PLATFORM-ONLY. Cada configuración SMTP es explícita: seguridad, mecanismo SASL, verificación TLS y protocolos, nombre HELO, remitente de sobre, tiempo de espera, límites por hora/diaria, DSN, 8BITMIME, SOCKS. HostSessionFactory construye la sesión de ellos; EmailSmtpService.sendVia envía a través de ella. - El mismo servidor nunca se añade dos veces (el mismo nombre o cualquier dirección compartida, sea cual sea el puerto o login), y el host de una organización debe ser un servidor público: nombres privados y en grupos y Las direcciones se rechazan en día y de nuevo antes de cada conexión. - Calentamiento es por huésped y siempre encendido. WarmupService trabaja en un WarmupHandle; un anfitrión de plataforma tiene uno calentamiento compartido por cada organización que lo usa. Las nuevas carreras comienzan en el inicio local del día. - WarmupReleaser es el único remitente: round-robin en los anfitriones de cada organización, saltándose un anfitrión a la espera de su ranura, en su gorra, frenada, en su propio límite o retroceder después de no hacerlo Conectar. Una conexión, TLS o fallo de inicio de sesión ya no cuenta un intento contra el destinatario. - Enviar ventana por organización (días, uno o más rangos, zona propia o la de las org). CálmenoPacer se extiende la tapa de cada día a través del tiempo libre de la ventana. - Salida en escenificación: /api/email/campañas/campañas/outbox listados enredados y cancelan o restauran. Un destinatario cancelado es SUPPRESSADO con una nota (sin estado DDL) y se lee como CANCELLED. - Puntos finales: ************* plataforma hosts en **************** detrás de MANAGE-OUTBOUND-EMAIL-HOSTS. El único huésped escribe respuesta 410. - OutboundHostBackfill semillas el relé k3m1 como host de PLATFORM-ONLY y migra las mancas de un solo anfitrión. No hay cambios de esquema.
· KlusterServices
Postfix-bulk acepta cualquier remitente de EmailService [skip ci]
El relevo es ahora un anfitrión de plataforma que el correo de campaña de cada organización puede ir a través, como cualquier cosa de esa organización envía como. Sólo el remitente nulo sigue siendo rechazado, con un 4xx. La accesibilidad no ha cambiado: las redes mídes y la NetworkPolicy la limitan a Vainas de EmailService. Aplicado directamente (kubectl apply -f ****************
· kamo-shared-library
MANAGE-OUTBOUND-EMAIL-HOSTS, los hosts de e-mail saliente de la consola de la consola
Una plataforma adecuada para el correo electrónico saliente que envía correo de campaña sale a través: los anfitriones compartieron con cada organización y los mantenidos para la organización de la plataforma, sus credenciales, disponibilidad y calentamientos. Forzada por EmailService's PlatformOutboundHostsController a través PlatformRightsResolver. Aplicado, por lo que no hay ningún derecho existente renumerado.
· kamo-internal
Borrar, filtrar y apagar NoRespuestas salientes
La página de auditoría obtiene una columna de subsistema y un filtro, selección de casilla con "seleccionar todo" y "seleccionar todas las coincidencias", y elimina para una fila, las filas seleccionadas, todo lo que coincide con los filtros, o todo, cada una detrás de una confirmación de que los nombres de la tabla de las filas son removibles. "Regisó y retención" enciende o desactiva la grabación de cada subsistema y establece cuánto tiempo se mantienen las filas. La solicitud que se elimina cada borraque y cómo es el modelo de selección de la cuadrícula Leer, vivir en ************* con sus propias pruebas.
· EmailService
El libro de sin Respiada se puede filtrar por subsistema, podado y contar lo que para grabar
Cada fila ahora nombra el subsistema que lo envió y, para una plantilla enviar, la clave de la plantilla. EmailTemplateService y el remitente de campaña abren un NoReprotlyOutboundFuente alcance alrededor de su envío SMTP; cualquier otra cosa es UNATTRIBUTED. NoRecompleta Mapas del subsistema las claves de plantilla canónicas a subsistemas, y una prueba falla si una plantilla canónica no se ajusta a ninguno. Elimina ir a la mesa misma a través de NoReproteja de Lididor: una fila, hasta 1000 filas seleccionadas, cada fila que coincida con los filtros de la lista, o la todo el libro led (TRUNCATE), que hay que pedirlo con confirmación. Bulk elimina en trozos de 500. NoReproylyOutboundSettings almacena un interruptor de grabación por subsistema y el retención (30 días por defecto, 0 mantiene las filas hasta que se eliminan), en caché para 15 segundos por vaina. NoReprotlyOutboundRetentionSweep purge horas en uno pod. Todos los nuevos endpoints son sólo para Dios, como la lista.
· InitializerService
El índice único (campaña, dirección), para un ambiente fresco
EmailService utilizado para crear **************** en cada startup; DDL en este grupo pertenece aquí en su lugar. Idempotente, auto-comimitido (YugabyteDB construye índices en línea), y los duplicados se cuentan y registran, nunca borrado - una fila contactada es el historial permanente de una campaña de una Dirección. EmailService ahora sólo comprueba el índice por este nombre.
· kamo-internal
El editor de la campaña escribe borde a borde, fusiona fichas en su propia columna
El tema se encuentra bajo el título de campaña y el público al lado del chip de status, así que el componer paso es el cuerpo de correo electrónico solo, llenando el centro de la página, con las fichas de fusión en una columna en a la derecha. Nada se salva por sí solo, por lo que la página ahora marca edita el servidor no ha visto y pregunta antes de irse los descartaría; TemplateInlineEditor informa que el propio cuerpo del miembro edita aparte de la normalización del tiempo de carga de Quill para que esa marca no se eliga fuera simplemente abriendo una campaña.

Tu universo está esperando.
Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.
Gratis para siempre: no se requiere tarjeta de crédito