Outlook Etait Casse. 25 Commits Plus Tard, Ca Marchait.
Mars 2026
Nous ecrivons personnellement a chaque nouveau client pour verifier si tout fonctionne -- nous pouvons voir les statistiques de classification et les resultats d'ingestion de notre cote, donc nous savons quand quelque chose semble anormal avant meme qu'ils ne nous le disent. Le 18 mars, l'une de nos premieres clientes a repondu. Elle venait de s'abonner a BillyBox et essayait de connecter son compte Outlook. Ca ne marchait pas. Ses principales factures professionnelles allaient sur Hotmail, et sans cette connexion, BillyBox ne recuperait que les documents de son Gmail -- qui n'etait pas la ou se trouvait l'essentiel.
Son message etait simple : "J'ai du mal a integrer mes comptes Outlook. Je trouve aussi que ca ne recupere pas vraiment de factures."
Elle ne faisait pas que tester -- ses factures professionnelles en dependaient.
Ce qui a suivi fut une nuit de developpement, debogage, murs, pivots et finalement une reecriture complete de l'approche depuis zero. Voici l'histoire reelle, racontee a travers notre git log.
Microsoft a Tue l'Acces par Mot de Passe
Quand nous avons lance BillyBox, les connexions Outlook fonctionnaient via IMAP -- le meme protocole que Gmail, Zoho et tous les autres fournisseurs email supportent. Vous entrez votre email et mot de passe, et l'application se connecte pour lire vos messages. Standard.
Mais Microsoft avait discretement desactive l'authentification basique pour tous les comptes personnels (@outlook.com, @hotmail.com, @live.com). Pas de mot de passe d'application, pas de connexion IMAP -- rien. Le seul moyen d'entrer etait OAuth2 : un flux "Se connecter avec Microsoft" qui passe par la page de connexion de Microsoft.
Nous avons utilise Claude (notre assistant de codage IA) pour investiguer la situation -- ce que Microsoft avait exactement deprecie, quels scopes OAuth etaient necessaires pour IMAP, comment fonctionne l'inscription d'application Azure pour les comptes personnels. La documentation etait dispersee et contradictoire. Ca s'est avere etre un presage.
La Decision
Nous avons recu son email a 22h50 un mardi soir. Nous avions deux options : repondre avec "nous travaillons dessus" et livrer dans quelques jours, ou le construire maintenant.
Nous avons choisi maintenant. C'etait une cliente payante avec un vrai probleme. Nous avons rembourse son mois immediatement, puis commence a coder.
Phase 1 : La Construction (6h41 - 7h05)
Le premier commit a atterri a 6h41 -- 948 lignes de nouveau code. Flux OAuth2 complet, authentification IMAP XOAUTH2, page de callback frontend, stockage chiffre des tokens. Claude a aide a echafauder l'inscription d'application Azure, l'echange de tokens OAuth2 et le mecanisme SASL XOAUTH2 que Microsoft exige a la place des mots de passe.
Premiere surprise en production : le point d'entree OAuth /common/ de Microsoft necessite la verification editeur (un processus de revue de plusieurs semaines). Nous sommes passes a /consumers/ -- le point d'entree pour comptes personnels uniquement qui ne l'exige pas.
Phase 2 : Deploiement et Polissage (7h17 - 8h18)
Le deploiement a revele ses propres problemes. L'image Docker Alpine avait une incompatibilite Chromium qui cassait notre pre-renderer. Le frontend avait besoin de routage SPA pour l'URL de callback Microsoft. La grille des fournisseurs etait cassee sur mobile.
Oui, nous avons livre le classificateur IA de factures dans la meme session. Quand vous etes dans le flow a 8h du matin apres avoir code toute la nuit, autant tout livrer.
Phase 3 : Le Cauchemar des Scopes IMAP (8h35 - 9h53)
C'est la que ca s'est gate. La connexion OAuth2 fonctionnait -- Microsoft acceptait nos identifiants et renvoyait un token valide. Mais quand nous essayions de lire les emails via IMAP, ca echouait. L'erreur : "Command Error. 12" sur SELECT INBOX. L'authentification reussit, mais vous ne pouvez ouvrir aucune boite.
Nous avons essaye chaque combinaison que la documentation Microsoft suggerait. Aucune n'a fonctionne. 8 commits en 78 minutes -- chacun une theorie differente, chacun errone :
Logger les scopes du token pour comprendre le probleme
Theorie : IMAP a besoin de tokens Exchange Online -- non
Non disponible non plus pour les apps comptes personnels
Login OK, SELECT echoue. "Command Error. 12"
Derniere tentative : scopes differents pour consentement vs. token
La documentation Microsoft dit que IMAP fonctionne avec OAuth2 pour les comptes personnels. Elle liste trois formats de scopes differents selon la page que vous lisez. Claude nous a aides a explorer chaque approche -- audiences Exchange Online, scopes Graph API, tokens specifiques aux ressources -- et nous avons essaye chaque combinaison. Aucune n'a fonctionne de maniere fiable.
Le probleme de fond : le serveur IMAP de Microsoft pour les comptes personnels rejette silencieusement les commandes SELECT meme avec un token OAuth2 valide. Vous pouvez vous authentifier, mais vous ne pouvez pas lire le courrier. Leur documentation ne mentionne nulle part cette limitation.
Phase 4 : Le Pivot (10h16)
Apres 8 tentatives echouees pour faire fonctionner IMAP, nous avons pris la decision : abandonner completement IMAP. A la place, utiliser l'API REST Graph de Microsoft -- une approche completement differente ou vous recuperez les emails via des requetes HTTP au lieu du protocole IMAP.
982 nouvelles lignes. Recuperation complete du courrier via Graph API -- listing des messages, telechargement des pieces jointes, threading des messages. Tout via HTTP.
Ce n'etait pas un petit changement. Nous avons ecrit un tout nouveau service de 913 lignes (outlook_graph_service.py) qui reprend notre service Gmail API mais utilise les endpoints Microsoft Graph. Scopes d'auth differents (Mail.Read au lieu de IMAP.AccessAsUser.All), gestion des tokens differente, analyse du format de message differente. Claude a aide a architecturer le service, traduire nos modeles IMAP en equivalents Graph API et gerer le modele de pagination de Microsoft.
Ca a fonctionne du premier coup. Pas de problemes de scopes, pas de codes d'erreur mysterieux. L'API Graph fait ce que le serveur IMAP de Microsoft refuse de faire.
Phase 5 : Rendre Ca Solide (10h46 - 15h44)
Le pivot a fonctionne, mais le trafic de production a revele de nouveaux cas limites :
Le rafraichissement de token pendant le fetch email corrompait la session DB
Les IDs de messages Graph sont plus longs que les UIDs IMAP
Le bug le plus vicieux : quand le token Microsoft expirait en cours de fetch, l'appel de rafraichissement commitait dans la base de donnees a l'interieur de la transaction de fetch, empoisonnant la session SQLAlchemy. Il a fallu 3 commits pour isoler correctement la rotation de tokens dans sa propre session.
Le Bilan Final
Le Role de l'IA
Chacun de ces 25 commits a ete co-ecrit avec Claude. Pas comme un generateur de code qui crache du boilerplate -- comme un partenaire de recherche et de debogage.
Quand nous devions comprendre ce que Microsoft avait reellement deprecie, Claude a fait la recherche. Quand nous avons bute sur le mur des scopes IMAP, Claude nous a aides a essayer chaque approche documentee de facon systematique. Quand nous avons decide de pivoter vers Graph API, Claude a aide a architecturer un service de 913 lignes en une seance -- traduisant nos modeles IMAP en equivalents REST, gerant le modele de pagination de Microsoft et mappant leur format de message sur notre schema.
Le cauchemar des 8 commits de scopes est un bon exemple de ce a quoi ressemble reellement le developpement assiste par IA. Ce n'est pas "l'IA ecrit du code parfait." C'est "l'IA vous aide a explorer un espace de problemes plus vite." Nous avons essaye 8 approches en 78 minutes qui auraient pris des jours de lecture de documentation manuelle. Quand aucune n'a fonctionne, nous avions suffisamment de preuves pour prendre la decision de pivoter en toute confiance.
Le Remboursement Qui a Garde une Cliente
Avant de commencer a construire, nous avons rembourse son premier mois. Elle payait pour quelque chose qui ne fonctionnait pas encore pour elle.
Le lendemain matin a 11h20, nous lui avons ecrit : "Outlook est maintenant supporte." Elle n'a pas annule. Elle est toujours abonnee aujourd'hui.
Le remboursement a coute 19,99 EUR. Les 25 commits, les 8 tentatives IMAP echouees, le pivot d'architecture complet a 10h du matin -- c'est simplement ce qu'il faut quand un client a un probleme et que vous prenez ca au serieux.
Connectez Votre Compte Outlook
BillyBox supporte maintenant les comptes Outlook, Hotmail et Live via l'API Microsoft Graph. Pas de partage de mot de passe, pas de mots de passe d'application, pas de configuration IMAP.
C'est comme ca que nous construisons BillyBox -- vite, proche des utilisateurs, et prets a jeter du code quand il ne marche pas.