Envoi d'email en C# (.NET) avec SmtpClient et MailKit

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Envoi d'email en C# (.NET) : de SmtpClient à MailKit

L'envoi d'emails est l'une des tâches clés lors du développement d'applications web, de services de notification et de systèmes d'entreprise. Dans l'écosystème .NET, il existe à la fois des outils intégrés et des bibliothèques tierces qui simplifient le travail avec SMTP, SSL/TLS et les scénarios complexes. Dans cet article, nous allons détailler comment envoyer un email en C#, en utilisant le classique SmtpClient et la bibliothèque moderne MailKit.



1. SmtpClient intégré (System.Net.Mail)

La classe SmtpClient est disponible dans .NET Framework et .NET Core/5+ (avec certaines limitations). Elle permet de configurer rapidement l'envoi d'un email via n'importe quel serveur SMTP.



Exemple de base d'envoi d'email

using System.Net;using System.Net.Mail;

var smtpClient = new SmtpClient("smtp.gmail.com"){ Port = 587, Credentials = new NetworkCredential("your_email@gmail.com", "your_app_password"), EnableSsl = true};

var mailMessage = new MailMessage{ From = new MailAddress("your_email@gmail.com"), Subject = "Email de test depuis C#", Body = "Bonjour ! Ce message a été envoyé via SmtpClient.", IsBodyHtml = false};

mailMessage.To.Add("recipient@example.com");

try{ smtpClient.Send(mailMessage); Console.WriteLine("Email envoyé avec succès !");}catch (Exception ex){ Console.WriteLine($"Erreur d'envoi : {ex.Message}");}

Important : Pour Gmail, un mot de passe d'application est nécessaire, et non un mot de passe classique. Pour les autres services (Yandex, Mail.ru), vérifiez les paramètres SMTP.



Envoi d'un email HTML avec pièce jointe

var message = new MailMessage();message.From = new MailAddress("sender@example.com");message.To.Add("user@example.com");message.Subject = "Rapport mensuel";message.IsBodyHtml = true;message.Body = "<h2>Rapport mensuel</h2><p>Fichier PDF en pièce jointe.</p>";

// Ajout d'une pièce jointevar attachment = new Attachment(@"C:\\Reports\\report.pdf");message.Attachments.Add(attachment);

using (var client = new SmtpClient("smtp.example.com", 587)){ client.Credentials = new NetworkCredential("login", "password"); client.EnableSsl = true; client.Send(message);}

Les pièces jointes peuvent être de tout type : images, documents, archives. Pour envoyer depuis la mémoire, utilisez MemoryStream.



2. Envoi asynchrone

Dans les applications modernes, il est préférable de ne pas bloquer le thread. Utilisez SendMailAsync :

public async Task SendEmailAsync(){    using var client = new SmtpClient("smtp.example.com", 587);    client.Credentials = new NetworkCredential("login", "password");    client.EnableSsl = true;

var message = new MailMessage("from@example.com", "to@example.com") { Subject = "Envoi asynchrone", Body = "Cet email a été envoyé de manière asynchrone." };

await client.SendMailAsync(message); Console.WriteLine("Envoyé de manière asynchrone !");}


3. Problèmes de SmtpClient et alternatives

Malgré sa simplicité, SmtpClient présente des inconvénients :

  • API obsolète (marquée comme obsolète dans .NET 5+) ;
  • Mauvaise prise en charge des protocoles d'authentification modernes (OAuth2) ;
  • Absence de prise en charge intégrée de S/MIME et des scénarios avancés.

C'est pourquoi Microsoft recommande d'utiliser des bibliothèques tierces, comme MailKit.



4. MailKit — une bibliothèque moderne pour la gestion des emails

MailKit est une bibliothèque multiplateforme open source. Elle prend en charge SMTP, POP3, IMAP, SSL/TLS, l'asynchrone, OAuth2 et bien plus encore.



Installation via NuGet

\

Recommendations