KamoCRM

Fermez trois chemins de faux-refus dans la revue du bénéficiaireDomainValidator

FixEmailService
Expédié
29 septembre 2026 à 02:05 UTC
Auteur
Kamo
Commite
38cd3d5

Un examen indépendant de D-luna-1 (email-fix-review-1.md) a trouvé deux BLOCKERS et un MAJOR, chacun un vrai faux refus de courrier légitime, démontré par le code déjà dans ce Objet: - Cas (BLOCKER): AliasService.createAlias, SharedMailboxService.create et **************** tous persistent une adresse exactement comme un administrateur dactylographié — une vraie ligne peut lire "Sales@kamocrm.com". Chaque recherche est maintenant cas insensible à la base de données (LOWER(col) = LOWER(?)), portée par org id, qui atteint encore les propres lignes de cette organisation à travers chaque table (org id HASH, col) l'indice unique plutôt qu'une analyse croisée — il ne peut pas utiliser l'indice composant de plage trié pour rechercher la valeur exacte en eux. Un indice fonctionnel sur LOWER(col) par tableau (ou cas de normalisation au moment de l'écriture dans ces trois services) serait restaurer une recherche de point clair; ni est fait ici sans signature, depuis Les deux sont plus grandes que cette tâche. Implémenté via les requêtes natives d'EntityManager dans DestinataireDomainValidator plutôt que de nouvelles méthodes de dépôt kamo-shared-library. - Plus-tags (BLOCKER): sage+urgent@kamocrm.com se replie maintenant vers sage@kamocrm.com (EmailAddress.baseLocalPart(), le même plier la couche de livraison/suppression avant la vérification de la boîte aux lettres — jamais pour la vérification du pseudonyme, alias est sa propre adresse distincte, délibérément créée. - Domaines racine multiples (MAJOR): une adresse alias-domaine (kamouniverse.com) est maintenant retrié contre chaque domaine dans ************* non seulement la valeur par défaut de l'interface utilisateur (allowedDomain) — une boîte aux lettres sur une deuxième racine ne lit plus comme inconnu juste parce que ce n'est pas le domaine par défaut de l'org. - Recherche non indexée des membres (MAJOR): le retrait du dépôt des membres est supprimé. **** **** **** n'a pas d'indice de support, donc il a lancé un scan de chaque rangée de membres de l'organisation pour chaque fausse estimation — exactement cela La raison d'exister. C'était aussi inutile: cette classe ne fonctionne que jamais pour une organisation sur KamoMail, où une adresse réelle et livrable a toujours un **************** **** ligne (c'est ce qui le prévoit); un membre dont .email se trouve correspondre mais n'a aucune de ces lignes n'a pas de boîte aux lettres sur le serveur partagé soit, donc un envoi à eux échoue à RCPT TO indépendamment de ce que cela C'est écrit. Voir la classe javadoc pour l'argument complet. - Truncation (NIT) : ***************** maintenant enferme sa prose à 5 adresses nommées ("et N plus"), de sorte que la coupe 300-char de DownstreamErrors ne peut plus découper le message d'un bon nombre de mauvais-bénéficiaires de l'envoi à la mi-adresse avant de MailPack lookup répertoire est ajouté. rejetéLes bénéficiaires() ne sont jamais tronqués. La conclusion du MINOR (existence oracle) est acceptée comme raisonnement, et non comme changement de code : pré-vol les réponses "fait x@ownDomain existent" plus rapidement que le pré-existant SendFailedException->422 RECIPIENTS REJECTED chemin déjà pourrait (un réel RCPT TO), pour le même interlocuteur de même org, avec siège; il n'ouvre aucune nouvelle limite de privilège. Tests (rouge confirmé, puis vert): DestinataireDomainValidatorTest réécrit contre la Nouvelle conception basée sur le gestionnaire de l'entité (miroirs ******************* RETOURS SELF Simulacre de requête) avec de nouveaux cas pour une adresse stockée-mélangée, un +tag contre une boîte aux lettres réelle, un +tag qui ne résout toujours pas, et une adresse alias-domaine dont la boîte aux lettres réelle vit sur un domaine racine non par défaut (avec et sans +tag). SendFailureResponseTest a gagné des cas pour la prose plafonnée vs. la prose non tronquée liste structurée. Essai lourd 77 run, 0 échec.

Tous les changements

Comme ce que tu vois expédier ?

Tout cela arrive dans votre espace de travail par lui-même. Commencez sur le plan gratuit et relisez cette page dans un mois.

Commencez gratuitement pour toujoursPrix de visualisation