Envoyer un email multidestinataire en smtp avec accusé de lecture, choix des pièces jointes, mot de passe caché

Description

Programme permettant l'envoi de mails grâce au protocole SMTP, avec authentification de l'expéditeur.

ATTENTION : Pour fonctionner, le programme a besoin
- de la directive "using System.Web.Mail;",
- et de la référence System Web ("Ajouter une référence..." > Onglet ".NET" > "System.Web" > "OK").

Fonctionnalités :
- Authentification de l'expéditeur (serveur sortant pas en Open Relay)
- Champs A, Cc, et Cci (multidestinataire, copie cachée)
- Accusé de lecture
- Mot de passe caché (PasswordChar = *)
- Choix des pièces jointes (openFileDialog)

Source / Exemple :


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;

///////////////////////////////////////////////////////////////////////////////////////////////////////
// En plus de la ligne ci-dessous, ne pas oublier d'ajouter une référence (onglet .NET : System.Web) //
///////////////////////////////////////////////////////////////////////////////////////////////////////
using System.Web.Mail;

namespace CSharpFR
{
    public partial class FormEnvoyerMail : Form
    {

        // Constructeur par défaut
        public FormEnvoyerMail()
        {
            InitializeComponent();

            // On lie les événements Click pour les pièces jointes
            this.tb_piece_jointe_1.Click += new System.EventHandler(this.tb_piece_jointe_1_Click);
            this.tb_piece_jointe_2.Click += new System.EventHandler(this.tb_piece_jointe_2_Click);
        }

        // Evénement Click sur le bouton b_envoyer
        private void b_envoyer_Click(object sender, EventArgs e)
        {

            // On crée une instance de mail
            MailMessage email = new MailMessage();

            // Lecture des champs du mail via les textbox
            email.From = tb_expediteur.Text;
            email.To = tb_destinataire.Text;
            email.Cc = tb_cc.Text;
            email.Bcc = tb_cci.Text;
            email.Subject = tb_sujet.Text;
            email.Body = tb_corps.Text;

            // On joint les fichiers sélectionnés (test effectué avec succès avec des fichiers txt, doc, pdf et mp3)
            email.Attachments.Add(new MailAttachment(@tb_piece_jointe_1.Text.ToString(), MailEncoding.UUEncode));
            email.Attachments.Add(new MailAttachment(@tb_piece_jointe_2.Text.ToString(), MailEncoding.UUEncode));

            // Parce que le serveur mail sortant n'est pas toujours en Open Relay et demande une authentification
            email.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
            email.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", tb_login.Text);
            email.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", tb_mdp.Text);

            // En bonus, demande d'accusé de lecture
            email.Headers.Add("Disposition-Notification-To", tb_expediteur.Text);

            // Adresse du serveur mail sortant SMTP
            SmtpMail.SmtpServer = tb_smtp.Text;

            try
            {
                // Hop, on envoie l'email !
                SmtpMail.Send(email);

                // Affiche un message de confirmation si l'email a été envoyé
                MessageBox.Show("Votre email a bien été envoyé !", "SUCCES", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            catch (Exception une_exception)
            {
                string un_string = une_exception.Message;

                // Affiche un message d'erreur si l'email n'a été pas envoyé
                MessageBox.Show("Votre email n'a pas pu être envoyé...", "ECHEC", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void tb_piece_jointe_1_Click(object sender, EventArgs e)
        {
            openFileDialog1.Title = "Choisir la pièce jointe 1";
            openFileDialog1.Multiselect = false;

            if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
            {
                tb_piece_jointe_1.Text = openFileDialog1.FileName.ToString();
            }
        }

        private void tb_piece_jointe_2_Click(object sender, EventArgs e)
        {
            openFileDialog2.Title = "Choisir la pièce jointe 2";
            openFileDialog2.Multiselect = false;

            if (openFileDialog2.ShowDialog(this) == DialogResult.OK)
            {
                tb_piece_jointe_2.Text = openFileDialog2.FileName.ToString();
            }
        }
    }
}

Conclusion :


Ce programme se veut clair et simplifié, afin de mettre en avant les caractéristiques principales de l'objet MailMessage.

C'est ma première contrib', et elle n'est pas transcendante, donc n'hésitez pas à faire des suggestions et des critiques.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.