KamoCRM

Cerrar tres caminos falsos-refusos la revisión encontrada en RecipienteDomainValidator

FixEmailService
Se descapó
29 de septiembre de 2026 a las 2:05 UTC
Autor
Kamo
Compromit
38cd3d5

Revisión independiente de D-luna-1 (email-fix-review-1.md) encontró dos BLOCKERs y un MAJOR, cada uno un verdadero falso rechazo de correo legítimo, demostrado de código ya en este repo: - Caso (BLOCKER): AliasService.createAlias, SharedMailboxService.create y Todos persisten una dirección exactamente como un administrador lo escribió: una fila real puede leer "Sales@kamocrm.com". Cada mirada es ahora caso-insensible en la base de datos (LOWER(col) = LOWER(?)), abarcada por org id, que todavía alcanza las filas de esta organización a través de cada tabla (org id HASH, col) índice único en lugar de un análisis de organización cruzada — simplemente no puede utilizar el índice componente de rango clasificado para buscar el valor exacto dentro de ellos. Un índice funcional LOWER(col) per table (or normalizing case at writing time in those three services) restauraría una búsqueda de punto claro; no se hace aquí sin señalización, ya que Ambos son más grandes que esta tarea. Implementado a través de EntityManager consultas nativas en RecipienteDomainValidator en lugar de nuevos métodos de repositorio de camo compartidos. - Plus-tags (BLOCKER): sage+urgent@kamocrm.com ahora se plega a sage@kamocrm.com (EmailAddress.baseLocalPart(), el mismo pliegue la capa de liberación/supresión ya se aplica) antes del cheque de buzón — nunca para el cheque de alias, desde un alias es su propia dirección distinta y deliberadamente creada. - Múltiples dominios raíz (MAJOR): una dirección de alias-dominio (kamouniverse.com) es ahora en contra de todos los dominios en ********** la UI default (allowedDomain) — un buzón de correo en una segunda raíz propiedad ya no lee como desconocido sólo porque no es el dominio predeterminado del org. - Consulta de miembros sin índice (MAJOR): se elimina el inconveniente de MemberRepository. ********** no tiene índice de apoyo, así que corrió un escaneo cada fila miembro en la organización por cada conjetura realmente mala — exactamente esto La característica es la propia razón para existir. También fue innecesario: esta clase solo corre para una organización en KamoMail, donde una dirección real, entregable siempre tiene una ********** row (that IS what provisions it); a member cuyo correo electrónico coincide pero no tiene ninguna de esas filas no tiene buzón en el servidor compartido, así que un envío a ellos falla en RCPT TO independientemente de lo que este cheque dicho. Vea la clase javadoc para el argumento completo. - Truncation (NIT): ************** Ahora sube su prosa a las 5 direcciones ("y N más"), por lo que DownstreamErrors' 300-char corte ya no puede cortar un mensaje de muchos ingredientes enviar fuera de dirección antes de MailPack directorio-lookup hint is appended. rechazadoRecipientes() nunca es truncado. El hallazgo MINOR (existencia oráculo) se acepta como razonamiento, no como cambio de código: el pre-luz respuestas de verificación "does x@ownDomain" más rápido que el pre-existente SendFailedException-prop422 RECIPIENTS REJECTED path already could (a real RCPT TO), for el mismo-org, llamador de asiento; no abre ningún nuevo límite de privilegio. Tests (red confirmado, luego verde): RecipienteDomainValidatorTest reescrito contra el nuevo diseño basado en EntityManager (mirres ********************** RETURNS SELF Mock de consultas) con nuevos casos para una dirección de caso mezclado almacenado, un +tag contra un buzón real, un +tag que todavía no resuelve, y una dirección alias-dominio cuyo buzón real vive en un dominio raíz no predeterminado (con y sin un +tag). SendFailureResponseTest ganó casos para la prosa capped vs. el no truncado lista estructurada. Una prueba de mvn pesada. 77, 0 fracasos.

Todos los cambios

Como lo que ves enviaste?

Todo llega a su espacio de trabajo por sí solo. Comience en el plan gratuito y lea esta página de nuevo en un mes.

Arranzar gratis para siempreVer Precios