Envoyer un e-mail avec pièce jointe en C#

Saad Aslam 12 octobre 2023
  1. Créer un formulaire à utiliser pour envoyer un e-mail avec pièce jointe en C#
  2. Envoyer un e-mail avec pièce jointe en C#
Envoyer un e-mail avec pièce jointe en C#

Ce didacticiel vous montrera comment utiliser le client SMTP en C# pour envoyer des e-mails avec des pièces jointes.

NET et .NET Core ont une capacité intégrée pour envoyer des e-mails via l’espace de noms System.Net.Mail. Bien que ce soit l’option la plus simple, cela nécessite un serveur SMTP.

Utilisez votre compte Gmail existant ou créez-en un nouveau pour envoyer des e-mails via SMTP. Vous devez activer l’accès aux applications moins sécurisées dans l’onglet de sécurité de votre profil pour utiliser les serveurs SMTP de Google.

Créer un formulaire à utiliser pour envoyer un e-mail avec pièce jointe en C#

Tout d’abord, créez une nouvelle application Windows Form dans Visual Studio.

Ouvrez votre fichier de conception .cs et créez un panneau dans votre formulaire. Ajoutez une étiquette avec le texte Composer, étiquette1, et tout à droite, X pour fermer ce formulaire.

Pour ajouter des fonctionnalités, double-cliquez sur l’étiquette, et il vous dirigera vers la fonction label_Click. Écrivez la ligne suivante à l’intérieur.

this.Dispose();

Créez 5 zones de texte nommées comme suit :

  • txtFrom
  • txtPassword
  • txtTo
  • txtTitle
  • txtBody

Dans la zone de texte txtPassword, ajoutez un caractère (* ou *) dans la propriété passwordChar pour masquer le mot de passe saisi par l’utilisateur dans le panneau en bas à droite de l’Explorateur de solutions.

Créez un bouton nommé btnSend avec le Envoyer à l’intérieur et attribuez-lui une couleur bleue. Ce bouton enverra l’e-mail à son adresse e-mail de destination.

Maintenant, vous avez besoin d’un bouton supplémentaire pour joindre un fichier à votre e-mail avant de l’envoyer et d’une étiquette pour afficher le chemin du fichier sélectionné. Alors, créons un LinkLabel et nommons-le linkLabel1 et un label appelé lblLocation.

Attribuez au LinkLabel une image et un texte Joindre un fichier à partir de l’explorateur de solutions. Maintenant, double-cliquez sur ce LinkLabel dans votre fichier de conception de formulaire .cs, et il vous dirigera vers ce code de fonction cliqué sur le bouton.

Dans cette fonction, nous devons ouvrir une boîte de dialogue. Mais avant cela, vous devez faire glisser et déposer OpenFileDialog dans votre conception de formulaire et le connecter au bouton “Joindre un fichier”.

Nous allons écrire le code suivant dans la fonction linkLabel1_linkClicked pour ouvrir la boîte de dialogue et connecter son chemin de fichier sélectionné à afficher dans lblLocation.

openFileDialog1.ShowDialog();
lblLocation.Text = openFileDialog1.FileName;

Production:

Formulaire créé à utiliser pour envoyer un e-mail avec pièce jointe

Maintenant que tout est prêt, rassemblez l’e-mail et le mot de passe de l’expéditeur, l’e-mail du destinataire, le message et le fichier joint. Écrivons le code fonctionnel pour envoyer un e-mail en utilisant le client SMTP.

Double-cliquez sur le bouton Envoyer que nous avons créé dans notre conception de formulaire. Dans sa fonction bouton1_Clic, nous effectuerons les opérations suivantes.

Envoyer un e-mail avec pièce jointe en C#

Pour commencer, créez un bloc d’instructions try-catch. L’exécution du programme essaie le bloc try, et si une erreur se produit, il attrape automatiquement l’exception.

try {
} catch () {
}

Dans le bloc try, nous déclarons une variable de type de données MailMessage nommée mail et initialisons son constructeur par défaut MailMessage() pour utiliser ses propriétés dans le processus d’envoi de l’e-mail.

MailMessage mail = new MailMessage();

Maintenant, déclarez une autre variable, smtp, de type de données SmtpClient, et initialisez une nouvelle instance de SmtpClient qui nécessite un hôte de chaîne. On passe smtp.gmail.com car on a besoin d’échanger des mails entre Gmail.

SmtpClient smtp = new SmtpClient("smtp.gmail.com");

Ensuite, nous allons utiliser .From, .To.Add(), .Subject et .Body de la classe MailMessage et leur attribuer les valeurs de nos zones de texte.

mail.From = new MailAddress(txtFrom.Text);
mail.To.Add(txtTo.Text);
mail.Subject = txtTitle.Text;
mail.Body = txtBody.Text;

Ensuite, nous devons joindre le fichier sélectionné au courrier. Nous allons créer une variable pièce jointe du type de données System.Net.Mail.Attachment et lui attribuer le chemin du fichier sélectionné.

Joignez le fichier au mail en utilisant la méthode .Attachments.Add() en lui passant la pièce jointe.

System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment(lblLocation.Text);
mail.Attachments.Add(attachment);

Nous devons attribuer certaines valeurs à SMTP, notamment le port utilisé par Gmail, l’adresse e-mail de l’expéditeur et le mot de passe. Nous devrions activer le SSL (Secure Sockets Layer) pour transmettre les données en toute sécurité.

Ensuite, nous appelons la méthode Send() et transmettons notre courrier. Après avoir envoyé le courrier, créons une boîte de message qui affichera un message avec une icône d’information et un bouton OK.

smtp.Port = 587;
smtp.Credentials = new System.Net.NetworkCredential(txtFrom.Text, txtPassword.Text);
smtp.EnableSsl = true;
smtp.Send(mail);
MessageBox.Show("Mail has been sent successfully!", "Email Sent", MessageBoxButtons.OK,
                MessageBoxIcon.Information);

Maintenant, le bloc catch contiendra le code suivant. Ces lignes de code intercepteront toute exception qui se produit et l’afficheront dans un MessageBox.

catch (Exception ex) {
  MessageBox.Show(ex.Message);
}

Code source complet

using System;
using System.Net.Mail;

namespace send_email_with_attachment {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void label1_Click(object sender, EventArgs e) {
      this.Dispose();
    }

    private void label5_Click(object sender, EventArgs e) {}

    private void label7_Click(object sender, EventArgs e) {}

    private void button1_Click(object sender, EventArgs e) {
      try {
        MailMessage mail = new MailMessage();
        SmtpClient smtp = new SmtpClient("smtp.gmail.com");
        mail.From = new MailAddress(txtFrom.Text);
        mail.To.Add(txtTo.Text);
        mail.Subject = txtTitle.Text;
        mail.Body = txtBody.Text;

        System.Net.Mail.Attachment attachment;
        attachment = new System.Net.Mail.Attachment(lblLocation.Text);
        mail.Attachments.Add(attachment);

        smtp.Port = 587;
        smtp.Credentials = new System.Net.NetworkCredential(txtFrom.Text, txtPassword.Text);
        smtp.EnableSsl = true;
        smtp.Send(mail);
        MessageBox.Show("Mail has been sent successfully!", "Email Sent", MessageBoxButtons.OK,
                        MessageBoxIcon.Information);

      } catch (Exception ex) {
        MessageBox.Show(ex.Message);
      }
    }

    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
      openFileDialog1.ShowDialog();
      lblLocation.Text = openFileDialog1.FileName;
    }

    private void txtFrom_TextChanged(object sender, EventArgs e) {}
  }
}

Production:

Formulaire rempli pour envoyer un e-mail avec pièce jointe

Appuyez sur envoyer et la boîte de message suivante apparaîtra.

E-mail envoyé avec succès avec pièce jointe

Auteur: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn