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

Soyez le premier à donner votre avis sur cette source.

Vue 13 142 fois - Téléchargée 1 597 fois

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

Ajouter un commentaire

Commentaires

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Et puis le code ne fait qu'instancier un MailMessage... on en a déjà un sacré paquet dans les sources, sur le forum, sur codyx... franchement, pas super utile comme code, déjà beaucoup trop présent. Et puis MSDN fourni lse exemples nécessaires (sans interface graphique):

http://msdn.microsoft.com/fr-fr/library/system.net.mail.mailmessage(VS.80).aspx
http://msdn.microsoft.com/fr-fr/library/system.net.mail.smtpclient(VS.80).aspx
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
27
Salut

Il est préférable d'utiliser les méthodes du nouvel namespace fournit à partir de .NET2
System.Net.Mail (ta méthodes est obsolète)

Cf http://www.codyx.org/snippet_envoyer-mail_563.aspx

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.