Architecture & ingénierie
L'architecture découple nettement trois responsabilités : la logique métier (le noyau du publipostage), la couche d'envoi et l'interface WPF. La couche d'envoi repose sur une abstraction IMailSender et une fabrique de fournisseurs — ajouter ou remplacer un canal d'envoi ne touche ni au noyau ni à l'interface. Le tout est câblé par injection de dépendances (Microsoft.Extensions).
La sécurité est traitée de bout en bout : les secrets — mots de passe, clés d'API, secrets client OAuth2 — sont chiffrés localement via Windows DPAPI, jamais stockés en clair. Un système de licence signée (signatures numériques ECDSA, détection d'altération) et la prise en charge des proxys d'entreprise (NTLM/Kerberos) permettent un déploiement en environnement contraint. L'intégration Microsoft 365 s'appuie sur le SDK Microsoft Graph v6 et Azure.Identity (OAuth2 / Entra ID), en flux délégué comme en application.
La qualité est tenue par une suite d'environ 160 tests automatisés (xUnit) qui couvrent le moteur de fusion, la résolution des pièces jointes et la sérialisation du format .mame. Les données proviennent de ClosedXML (Excel) et CsvHelper (CSV), l'envoi SMTP de MailKit / MimeKit, et l'aperçu du message s'affiche via WebView2.
Ce que ce projet démontre
MailMerge réunit un large spectre d'ingénierie sur un même produit : architecture logicielle et clean code, développement d'applications de bureau Windows, intégration d'API (Microsoft Graph, Brevo), authentification et sécurité (OAuth2 / Entra ID, chiffrement, signature numérique), interopérabilité COM avec Outlook, internationalisation, traitement de données (CSV/Excel) et tests automatisés.
Il illustre surtout une compétence de modernisation : reprendre une application héritée (WinForms, .NET Framework 4.8), la réarchitecturer proprement en .NET 10 / WPF / MVVM et l'industrialiser jusqu'à la distribution, sans jamais rompre la compatibilité avec les fichiers des utilisateurs.
Technologies
C# 13 .NET 10 WPF XAML MVVM CommunityToolkit.Mvvm Microsoft.Extensions DI Microsoft Graph SDK v6 Azure.Identity MailKit / MimeKit API Brevo Outlook COM interop ClosedXML CsvHelper WebView2 DPAPI ECDSA xUnit