Skip to content

🐛 E-mails non reçus par les adresses Hotmail/Outlook : inscription impossible (investigation prod) #502

Open

Description

@ronan-develop

Constat (prod, 2026-10-17)

Un membre avec une adresse Hotmail/Outlook ne reçoit pas les e-mails de l'application et ne peut donc pas finir son inscription (pas d'inscription publique : l'admin crée le compte, la personne définit son mot de passe via « Mot de passe oublié »).

Investigation en lecture seule sur la production :

  • Compte actif, jamais connecté, non verrouillé (last_login_at nul) : aucun blocage côté application.
  • 3 jetons de réinitialisation générés le 16/10 (15 h 41, 15 h 44, 19 h 58) : l'application a bien traité les demandes. Le 2ᵉ et le 3ᵉ ont invalidé le précédent, et le dernier est expiré sans avoir servi.
  • Aucun échec d'envoi journalisé : pas d'app.log (le SafeMail y écrit la classe de l'erreur), cron.log sans échec. Donc sendmail a accepté le message : la perte se produit après la remise à Exim.
  • Aucun rebond (bounce) dans la boîte locale. Les journaux Exim (exim_mainlog) ne sont pas lisibles depuis le compte (pas admin) : impossible de voir le refus ou la mise en file.
  • DNS du domaine d'envoi : SPF ~all (softfail par construction, IP de sortie variable de l'hébergeur), DKIM présent, DMARC p=none sans rua. Outlook/Hotmail est connu pour être strict avec les expéditeurs sur IP mutualisée : e-mail rejeté, ou classé en courrier indésirable, sans rebond visible.

Hypothèse la plus probable : rejet ou filtrage silencieux par Outlook.com (réputation de l'IP mutualisée + SPF softfail), pas un bogue applicatif. Non confirmée faute de journaux Exim.

À faire

  1. Confirmer : demander à la personne de chercher dans Indésirables/Autres et d'ajouter no-reply@… à ses expéditeurs sûrs ; demander au support de l'hébergeur le journal Exim pour ces envois (heures ci-dessus, UTC+2 côté utilisateur).
  2. Inscrire l'expéditeur au programme Outlook SNDS / JMMP si l'IP de sortie est stable, ou demander à l'hébergeur le include: SPF officiel d'envoi (voir 🔒 E-mails : durcir DMARC (p=none vers quarantine/reject) et SPF (audit #185, gravité faible) #430).
  3. Passer DMARC avec rua pour voir les rapports (🔒 E-mails : durcir DMARC (p=none vers quarantine/reject) et SPF (audit #185, gravité faible) #430).
  4. Observabilité : journaliser (sans donnée personnelle) l'envoi accepté, et exposer dans l'écran admin Utilisateurs un état « dernier e-mail d'invitation envoyé à telle heure », pour qu'un admin sache si le mail est parti.
  5. Contournement pour l'inscription quand un e-mail n'arrive pas : lien d'activation/réinitialisation affichable à l'admin pour transmission par un autre canal (à challenger côté sécurité : jeton à usage unique, 1 h).

Liens

Activity

  1. ronan-develop commented on Oct 17, 2026

    @ronan-develop
    OwnerAuthor

    Étape 3 faite (2026-10-17) : le DMARC du domaine d'envoi porte maintenant un rua (toujours p=none, observation seulement), vérifié sur deux résolveurs publics. Premiers rapports attendus sous 24 à 48 h. Reste : réponse du support hébergeur (journaux Exim, IP de sortie, include: SPF) et l'observabilité côté application.

  2. ronan-develop commented on Oct 17, 2026

    @ronan-develop
    OwnerAuthor

    Périmètre retenu pour le volet observabilité : colonne password_resets.mail_sent_at (migration 042) renseignée seulement quand le transport accepte le mail, et affichage par compte dans l'écran admin Utilisateurs (dernière demande de lien, mail accepté ou non). Le journal info « accepté » est abandonné : les mesures MailSent/MailFailed existent déjà et la prod est en niveau warning.

  3. added a commit that references this issue on Oct 17, 2026
  4. ronan-develop commented on Oct 17, 2026

    @ronan-develop
    OwnerAuthor

    PR #505 fusionnée (volet observabilité : mail_sent_at, journal info, état d'envoi dans l'écran Utilisateurs). Non déployé. Reste ouvert : réponse du support hébergeur (journaux Exim, IP de sortie, include: SPF), lecture des premiers rapports DMARC, décision sur le contournement par lien transmis par l'admin.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions