mirror of
https://github.com/R0m1k3/PleinR.git
synced 2026-10-22 22:58:04 +02:00
Boîte mail : accorder le port SMTP et le chiffrement
Le port et la case « connexion chiffrée » étaient deux champs indépendants qu'il fallait accorder de tête. Passer en 587 sans décocher fait tenter une poignée de main TLS sur un port qui répond en clair : la connexion meurt sur un « wrong version number » que rien ne traduisait. - `src/lib/smtp-config.ts` (pur, testé) : `impliedSecure()`, `tlsMismatch()` et `describeSmtpError()`, qui traduit les échecs courants — mauvaise case, port filtré, identifiants refusés, certificat, expéditeur rejeté — en consigne actionnable, l'explication avant la trace puisque l'écran tronque. - `SmtpAccountForm` (client) réaligne la case sur le port saisi, propose les deux ports courants en pastilles et affiche le désaccord s'il subsiste. Le mot de passe enregistré ne descend pas en prop, seul un booléen le fait. - Transport : `requireTLS` hors TLS implicite — sans lui STARTTLS reste opportuniste et l'identifiant partirait en clair chez un serveur qui ne l'annonce pas — SNI explicite, TLS 1.2 minimum, et délais ramenés à quelques secondes pour qu'un port bloqué en sortie rende son verdict au lieu de figer l'action serveur. - `verifySmtp` referme la socket même en échec et dit sur quel port et dans quel mode la connexion a abouti. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RCUSintYfXnBtwFKQezFSt
This commit is contained in:
6 files changed
+434
-61
No files matched your search
@@ -382,6 +382,21 @@ pas de cascade automatique, la bascule est un choix visible.
|
||||
**Microsoft → API Graph** (`/me/sendMail`) : l'authentification basique SMTP
|
||||
est désactivée depuis 2024, y compris sur outlook.com et hotmail.com.
|
||||
**SMTP générique** via `nodemailer`, seule dépendance d'envoi.
|
||||
- **Port et chiffrement SMTP sont un seul choix.** `src/lib/smtp-config.ts` est
|
||||
**pur** (`tests/smtp-config.test.ts`) : `impliedSecure()` dit que seul le port
|
||||
465 chiffre dès l'ouverture, les autres (587, 25, 2525) passent par STARTTLS,
|
||||
et `tlsMismatch()` prévient quand la case et le port se contredisent. Le
|
||||
formulaire (`SmtpAccountForm`, client) réaligne la case sur le port choisi :
|
||||
un TLS tenté sur le 587 échoue sur la bannière en clair (« wrong version
|
||||
number »), un dialogue en clair sur le 465 attend une réponse qui ne vient
|
||||
jamais. `describeSmtpError()` traduit ces échecs avant affichage —
|
||||
l'explication d'abord, la trace ensuite, parce que l'écran tronque.
|
||||
- Le transport pose `requireTLS` hors TLS implicite : sans lui, STARTTLS est
|
||||
*opportuniste* et l'identifiant partirait en clair chez un serveur qui ne
|
||||
l'annonce pas. Les délais (`connectionTimeout`, `greetingTimeout`) sont
|
||||
ramenés à quelques secondes : ces connexions s'ouvrent depuis une action
|
||||
serveur, et un port filtré en sortie — cas courant chez les hébergeurs — ne
|
||||
doit pas bloquer l'écran deux minutes.
|
||||
- `mail_accounts.from_address` est **lu chez le fournisseur** au retour OAuth,
|
||||
jamais saisi : Gmail expédie comme l'utilisateur authentifié, Graph comme la
|
||||
boîte, et une adresse d'un autre domaine ferait tomber SPF/DKIM.
|
||||
|
||||
Reference in new issue
Block a user