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}"); Aussi dans la bibliothèque
Eloquent ORM pour PHP : guide complet avec exemples
Génération de PDF en JavaScript (Node.js) : bibliothèques et outils
ORM pour Swift (iOS/macOS) : comparaison et exemples d'utilisation
Tests en TypeScript : Guide complet des frameworks et outils
Winston pour JavaScript (Node.js) : guide complet avec exemples