patchcenter/app/routers
Admin MPCZ 97ac7681d2 feat(mail): backend Outlook COM (Windows local) + toggle dans Settings
Resout le probleme de firewall SMTP corporate qui bloque outbound 25/465/587 depuis
les postes de travail. Outlook utilise HTTPS (EWS/Graph) vers O365 -> aucun firewall.

Service mail_outlook_com.py:
- send_via_outlook_com(to, subject, html, cc, display_only): pilote Outlook via COM
  pywin32. Mail apparait dans Sent Items du user, traçable.
- Mode display_only=True ouvre la fenetre de composition Outlook au lieu d'envoyer
  automatiquement (relecture manuelle).
- pythoncom.CoInitialize() pour fonctionner dans un thread uvicorn.

Service mail_service.py:
- send_html_mail dispatche selon Setting 'mail_backend' (smtp / outlook_com).
- Defaut = smtp.

Settings:
- 'mail_backend' = 'smtp' | 'outlook_com'
- 'mail_outlook_display_only' = 'true' | 'false'
- UI: 2 selects en haut de la card SMTP avec hints + le SMTP existant en dessous

Pre-requis Windows: pip install pywin32 + Outlook lance + connecte au compte O365.
2026-05-07 22:24:46 +02:00
..
__init__.py PatchCenter v2.0 — Initial commit 2026-04-04 03:00:12 +02:00
applications.py Migre etat vers labels iTop verbatim (Production, Nouveau, etc.) 2026-04-14 18:40:56 +02:00
audit.py Secu: verif permissions can_view/can_edit sur endpoints HTMX detail/edit 2026-04-17 23:15:04 +00:00
auth.py Top bar: affiche display_name (Prenom NOM) + (AD) si LDAP + login en gris 2026-04-15 12:00:41 +02:00
campaigns.py Optim: logging structure + query_helpers.py + fix exceptions silencieuses routers 2026-04-17 23:19:18 +00:00
contacts.py Optim: logging structure + query_helpers.py + fix exceptions silencieuses routers 2026-04-17 23:19:18 +00:00
dashboard.py Optim: logging structure + query_helpers.py + fix exceptions silencieuses routers 2026-04-17 23:19:18 +00:00
duty.py Add page Tour de garde SecOps : import xlsx + table + vue hebdo + competences 2026-04-17 23:39:11 +00:00
patch_history.py patch_history: tolere parametres vides dans les filtres (week=, source=, etc.) 2026-04-17 12:42:58 +00:00
patching.py fix(servers/edit + patching): dropdown 'Solution applicative' affiche TOUTES les applications (filtre 'WHERE itop_id IS NOT NULL' retire) - les apps locales sans correspondance iTop apparaissent maintenant 2026-05-05 15:58:41 +02:00
planning_import.py fix(pct/cc): parse <Prenom> <NOM> et match email SANEF strict (prenom.nom@%) 2026-05-07 21:58:34 +02:00
planning.py Migre etat vers labels iTop verbatim (Production, Nouveau, etc.) 2026-04-14 18:40:56 +02:00
qualys_tags.py Add /qualys/tagsv3/catalog: page de reference nom/type/QQL/couleur par categorie 2026-04-15 10:20:41 +02:00
qualys.py feat(qualys/agents): bloque troubleshooting pour Windows (route + bouton 'Non gere' dans table) 2026-04-28 01:48:32 +02:00
quickwin.py Admin applications + correspondance cleanup + tools presentation DSI 2026-04-13 21:11:58 +02:00
referentiel.py Fix: KeyError 'updated' → 'servers_updated' dans sync_to route 2026-04-11 13:36:23 +02:00
servers.py fix(servers/edit + patching): dropdown 'Solution applicative' affiche TOUTES les applications (filtre 'WHERE itop_id IS NOT NULL' retire) - les apps locales sans correspondance iTop apparaissent maintenant 2026-05-05 15:58:41 +02:00
settings.py feat(mail): backend Outlook COM (Windows local) + toggle dans Settings 2026-05-07 22:24:46 +02:00
snapshots.py fix(snapshots): exclure uniquement le compte technique 'admin' local (pas le role admin) 2026-05-07 21:06:13 +02:00
specifics.py Phase 1 securite: permission checks sur tous les routers 2026-04-08 16:46:05 +02:00
users.py Users/Contacts: workflow profils + LDAP + sync iTop + etat aligne 2026-04-12 18:50:43 +02:00