Envoi d'Email en C# (.NET) : bibliothèque System.Net.Mail

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) : guide complet sur System.Net.Mail

Dans le développement moderne sur la plateforme .NET, la tâche d'envoi d'emails est résolue par la bibliothèque standard System.Net.Mail. Cet outil intégré ne nécessite pas l'installation de paquets NuGet supplémentaires et fournit une API flexible pour créer et envoyer des messages électroniques via un serveur SMTP. Dans cet article, nous analyserons en détail tous les composants clés de la bibliothèque, examinerons des exemples de code, la gestion des erreurs et les meilleures pratiques.



Classes principales de la bibliothèque

La bibliothèque System.Net.Mail comprend trois classes principales :

  • SmtpClient — responsable de la connexion au serveur SMTP et de l'envoi des messages.
  • MailMessage — représente le courriel lui-même : sujet, corps, expéditeur, destinataires, pièces jointes.
  • Attachment — permet d'ajouter des fichiers au courriel.


Exemple de base d'envoi d'Email

Considérons le scénario le plus simple : l'envoi d'un courriel textuel via le serveur SMTP de Gmail. Notez que pour utiliser Gmail, un mot de passe d'application (App Password) est nécessaire en raison de l'authentification à deux facteurs.

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

class Program{ static void Main() { var fromAddress = new MailAddress("your@gmail.com", "Votre Nom"); var toAddress = new MailAddress("recipient@example.com", "Destinataire"); const string fromPassword = "votre_mot_de_passe_application"; const string subject = "Courriel de test depuis .NET"; const string body = "Bonjour ! Ce courriel a été envoyé avec C#.";

var smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(fromAddress.Address, fromPassword) };

using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body }) { smtp.Send(message); }

Console.WriteLine("Courriel envoyé !"); }}


Envoi d'emails HTML avec pièces jointes

Il est souvent nécessaire d'envoyer un courriel au format HTML avec des fichiers joints. Pour cela, définissez la propriété IsBodyHtml = true et utilisez la collection Attachments.

using (var message = new MailMessage(fromAddress, toAddress)){    message.Subject = "Rapport mensuel";    message.IsBodyHtml = true;    message.Body = "<h2>Bonjour !</h2><p>Votre rapport est en pièce jointe.</p>";

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

smtp.Send(message);}


Envoi asynchrone (async/await)

Pour un envoi non bloquant dans les applications modernes, utilisez SendMailAsync. C'est particulièrement important dans les applications web (ASP.NET Core) et les programmes de bureau avec interface utilisateur.

public async Task SendEmailAsync(){    using (var message = new MailMessage(fromAddress, toAddress)    {        Subject = "Envoi asynchrone",        Body = "Courriel envoyé de manière asynchrone"    })    {        await smtp.SendMailAsync(message);    }}


Gestion des exceptions

Lors du travail avec des serveurs de messagerie, des erreurs peuvent survenir : identifiants incorrects, délais d'attente, problèmes DNS. Enveloppez toujours l'envoi dans un bloc try-catch.

try{    smtp.Send(message);    Console.WriteLine("Envoyé avec succès.");}catch (SmtpException ex){    Console.WriteLine($"Erreur SMTP : {ex.StatusCode} - {ex.Message}");}catch (Exception ex){    Console.WriteLine($"Erreur générale : {ex.Message}");                    

Recommendations