Mise à jour : j’ai maintenant reproduit la cause des échecs Access Denied que je rencontrais et j’ai ouvert une PR :
La partie importante de mon observation initiale était :
- e-mail entrant simple/plain → accepté
- e-mail plus riche contenant des médias intégrés → rejeté avec
Access Denied
Les messages rejetés étaient traités en tant qu’utilisateurs en attente/étrangers dans une catégorie qui accepte les e-mails entrants des étrangers.
Depuis #42079, NewPostManager détecte les médias intégrés directement depuis le contenu du message lorsque les métadonnées de taille d’image sont absentes. Cela entraîne correctement l’entrée de ces messages dans le parcours de révision :contains_media.
Cependant, avant de mettre le message en file d’attente pour révision, NewPostManager.default_handler effectue la vérification normale de création de sujet de catégorie via Guardian.
Pour un utilisateur en attente recevant un e-mail, cette vérification peut échouer même si Email::Receiver a déjà accepté le parcours d’e-mail pour les étrangers de la catégorie et transmis skip_validations.
Cela produit l’erreur que je rencontrais :
Email::Receiver::InvalidPost: Access Denied
J’ai ajouté un test de régression bout en bout pour un e-mail contenant des médias provenant d’un étranger.
Sur la branche main actuelle, avant la correction, le test reproduit :
Email::Receiver::InvalidPost: Access Denied
J’ai également testé le même cas juste avant #42079, où l’e-mail entrant est accepté, confirmant qu’il s’agit d’une régression introduite par ce changement.
La PR préserve la modération des médias prévue plutôt que de la contourner. Avec la correction, l’e-mail entrant est mis en file d’attente en tant que ReviewableQueuedPost et sa raison de révision reste :
contains_media
Les specs pertinentes de Email::Receiver et NewPostManager passent localement :
261 exemples, 0 échecs
Cela semble donc expliquer le comportement Access Denied que j’ai signalé ci-dessus, y compris pourquoi les e-mails simples fonctionnaient tandis que les messages plus riches contenant des médias intégrés ne fonctionnaient pas.