+31
−0
+2
−0
apps/api/src/adaptateurs/smtp.ts
0 → 100644
+105
−0
+29
−1
+18
−3
Loading
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:Claude Opus 5 <noreply@anthropic.com>