Commit f72b9327 authored by Kourser's avatar Kourser
Browse files

Le courriel part enfin, et refuse de partir en clair

Sans transport, personne n'entre : ce sont les liens de vérification et de
connexion qui passent par là. L'instance le savait et refusait de démarrer en
production plutôt que de les écrire dans « docker logs » — un refus juste,
mais qui ne pouvait être satisfait par rien. Il peut l'être maintenant.

SMTP, et pas l'API d'un fournisseur
  C'est la dépendance à ne pas choisir pour la commodité de son intégration.
  SMTP est ce que toute organisation possède déjà, chez elle ou chez son
  hébergeur, et il ne fait de personne un point de passage obligé — ce qui est
  la raison d'être du produit. Les passerelles Brevo ou OVHcloud qu'une
  organisation branche restent à leur place : elles servent la diffusion de
  masse, pas l'authentification.

  nodemailer plutôt qu'un client écrit à la main. Négocier STARTTLS,
  s'authentifier et encoder du MIME sans faute est un travail dont le rater
  coûte des comptes ; ce n'est pas là qu'on gagne à improviser.

Le chiffrement n'est pas un réglage
  Hors boucle locale, STARTTLS est exigé et l'envoi échoue si le serveur ne
  l'offre pas. nodemailer se rabattrait volontiers en clair, et c'est ce repli
  silencieux qu'on refuse : un lien de connexion sur le fil est le même trou
  que dans un journal, avec un public plus large.

  Il n'existe pas d'interrupteur pour l'ôter — il n'aurait qu'un mauvais
  usage. La seule dispense est le relais en boucle locale, où rien ne quitte
  la machine : elle est déduite de l'hôte, pas offerte en option.

  Le mot de passe n'est pas demandé par l'installateur. Il vient de l'extérieur,
  comme la clé d'Apple, et se colle dans .env pour la même raison.

Ce que le contrôle éprouve
  Un serveur SMTP minimal est levé sur la boucle locale, le temps d'une
  transaction, et l'on relit ce qui est réellement passé sur le fil :
  expéditeur, destinataire, sujet, corps. Puis la décision qui ne se voit pas
  à l'usage — STARTTLS exigé d'un relais distant, toléré en local, et le port
  465 qui chiffre d'emblée. Dix garanties.

  Une décision qu'on ne peut pas relire est une décision qu'on croit prise :
  les options remises à nodemailer sont isolées dans une fonction, pour être
  contrôlables plutôt que supposées.

L'installateur suit
  Il propose le relais, avec « oui » par défaut en production, et dit dans le
  récapitulatif d'où partiront les courriels. Choisir la production sans
  relais est encore possible, et prévenu avant la levée plutôt que découvert
  dans une boucle de redémarrage.

Contrôlé
  Les dix garanties passent. La pile démarre en production avec SMTP_HOST
  renseigné, là où elle bouclait ; sans lui, elle refuse toujours, et le refus
  nomme désormais les deux variables à écrire.

Réserve : « pnpm verif » ne va pas jusqu'à ce contrôle, la suite s'arrêtant
plus tôt sur un import manquant introduit par cc663d8d —
verification/relais.ts appelle apps/relais/src/chargeJwt.ts, qui n'a jamais
existé ; le fichier livré s'appelle fcm.ts. Défaut antérieur et distinct,
laissé tel quel : le corriger demande de savoir ce que ce commit voulait.

Co-Authored-By: default avatarClaude Opus 5 <noreply@anthropic.com>
parent 7773551d
Loading
Loading
Loading
Loading