Pourquoi l'envoi d'email via Gmail en .NET est un casse-tête (et comment l'éviter)
\n\nSi vous avez déjà essayé de configurer l'envoi d'emails via Gmail dans votre application .NET, vous le savez : cette tâche qui semble simple se transforme vite en quête. Vous écrivez 10 lignes de code, vous lancez — et vous obtenez une SmtpException avec un message mystérieux sur "l'application non sécurisée". Ça vous dit quelque chose ?
Sur Stack Overflow, la question "Sending email in .NET through Gmail" cumule des milliers de vues et des centaines de réponses. Les gens se battent avec ce problème depuis des années. Dans cet article, nous allons décortiquer 4 approches concrètes en C#, du classique aux solutions modernes, et déterminer laquelle utiliser en 2025.
\n\nSpoiler : le code que vous avez trouvé dans un blog de 2015 ne fonctionne probablement plus. Google durcit constamment ses politiques de sécurité. Mais ne vous inquiétez pas — nous vous montrerons des solutions qui marchent.
\n\nApproche 1 : Le classique SmtpClient (et pourquoi il est obsolète)
\n\nLa méthode la plus évidente est d'utiliser le SmtpClient intégré de System.Net.Mail. Voici à quoi cela ressemblait à "l'âge d'or" :
using System.Net;\nusing System.Net.Mail;\n\nvar message = new MailMessage("votre@gmail.com", "destinataire@example.com")\n{\n Subject = "Email test depuis .NET",\n Body = "Bonjour ! Ceci est un test."\n};\n\nusing var client = new SmtpClient("smtp.gmail.com", 587)\n{\n Credentials = new NetworkCredential("votre@gmail.com", "votre-mot-de-passe"),\n EnableSsl = true\n};\n\nclient.Send(message);\n\nEntre 2010 et 2015, cela fonctionnait. Mais aujourd'hui, Google a bloqué la connexion avec un mot de passe simple pour la plupart des comptes. Vous aurez besoin de :
\n- \n
- Mot de passe d'application (App Password) — mais seulement si l'authentification à deux facteurs est activée \n
- Ou autoriser "l'accès aux applications moins sécurisées" — une option que Google a déjà supprimée \n
Inconvénients de cette approche :
\n- \n
SmtpClientest marqué commeObsoletedans .NET 5+ \n - Ne prend pas en charge les protocoles d'authentification modernes (OAuth 2.0) \n
- Le mot de passe d'application n'est pas éternel — il doit être mis à jour manuellement \n
Quand l'utiliser : uniquement pour des prototypes rapides ou des outils internes où la sécurité n'est pas critique.
\n\nApproche 2 : MailKit — moderne et puissant
\n\nSi vous voulez une solution professionnelle, utilisez la bibliothèque MailKit du développeur Mono. Non seulement elle fonctionne, mais elle est aussi activement maintenue.
\n\nCommencez par installer le package :
\ndotnet add package MailKit\n\nVoici le code avec un mot de passe d'application :
\n\nusing MailKit.Net.Smtp;\nusing MimeKit;\n\nvar message = new MimeMessage();\nmessage.From.Add(new MailboxAddress("Votre nom", "votre@gmail.com"));\nmessage.To.Add(new MailboxAddress("Destinataire", "destinataire@example.com"));\nmessage.Subject = "Email via MailKit";\nmessage.Body = new TextPart("plain") { Text = "Bonjour depuis .NET !" };\n\nusing var client = new SmtpClient();\nawait client.ConnectAsync("smtp.gmail.com", 587, MailKit.Security.SecureSocketOptions.StartTls);\nawait client.AuthenticateAsync("votre@gmail.com", "votre-mot-de-passe-application");\nawait client.SendAsync(message);\nawait client.DisconnectAsync(true);\n\nPourquoi MailKit est meilleur que SmtpClient ?
\n- \n
- Méthodes asynchrones — ne bloque pas le thread \n
- Prise en charge de MIME, signatures, chiffrement \n
- Fonctionne sur toutes les plateformes .NET (y compris .NET MAUI et Unity) \n
- N'est pas marqué comme obsolète \n
Mais cette approche a aussi une limite : le mot de passe d'application est une solution temporaire. Si votre compte Google est compromis, un attaquant pourra envoyer des emails en votre nom.
\n\nApproche 3 : Google API + OAuth 2.0 (pour les projets sérieux)
\n\nLa méthode la plus correcte et sécurisée consiste à utiliser