An IMAP/SMTP client in the menu, with its tests against real servers. Most of the work went into refusals: an application password is named only when the server actually refuses, an accented password is reported as never having left the machine, and a refusal is recognised by what the server SAYS rather than by matching its wording. A malformed date no longer takes the whole folder down, and a received email is never read as markup. --- FR --- Un client IMAP/SMTP dans le menu, avec ses tests contre de vrais serveurs. L'essentiel du travail porte sur les refus : le mot de passe d'application n'est nommé que lorsque le serveur refuse vraiment, un mot de passe accentué est signalé comme n'ayant jamais quitté la machine, et un refus se reconnaît à ce que le serveur DIT plutôt qu'à ses mots. Une date illisible n'emporte plus le dossier entier, et un courriel reçu n'est jamais lu comme du balisage. Assisted-by: Claude Opus 5
11 lines
503 B
Python
11 lines
503 B
Python
#!/usr/bin/env python3
|
|
# © 2026 TechnoLibre (http://www.technolibre.ca)
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
"""Client courriel du CLI TODO.
|
|
|
|
Le paquet est découpé par responsabilité : `crypto` scelle, `secrets` garde
|
|
les mots de passe, `accounts` décrit les comptes, `store` cache localement,
|
|
`imap_sync` synchronise, `smtp_send` envoie, `tui` affiche, `menu` branche le
|
|
tout sur le CLI. Aucun de ces modules n'importe `todo.py` ; c'est `todo.py`
|
|
qui importe `menu`.
|
|
"""
|