samedi 5 avril 2008

Envoi de mail avec ASP.NET 2.0 - WebForm

L'envoi de mail peut se faire avec IIS en local, à condition que le composant Serveur SMTP soit installé (voir panneau de configuration - ajout/supp de programmes - ajout/suppression de composants Windows, ensuite "IIS" puis vérifier que "service SMTP" est cochée).

J'ai créé ici une fonction SendMail qui fait le travail.

Je précise qu'il faut ajouter :

using System.Net.Mail;

(Avant l'envoi de mail se fesait en utilisant avec System.Web.Mail, qui est à present obsolète).

public void SendMail()
{
//Déclaration du MailMessage
MailMessage mail = new MailMessage();
//Affectation des adresses mail
//emetteur(email, nom)
mail.From = new MailAddress("from@domain.com", "Sanaa");
//destinataire
mail.To.Add("to@domain.com");
//objet du mail
mail.Subject = "mail test";
//corps du mail
mail.Body = "ceci est le corps du message.";
//envoi du message
SmtpClient smtp = new SmtpClient("localhost");
smtp.Send(mail);
}

Si tout se passe bien, le mail est envoyé sans problème!

Erreurs possibles et solutions:


En ce qui me concerne, ça ne pas marché du 1er coup.. j'ai eu l'erreur suivante:

 5.7.1 Unable to relay for to@domain.com


j'ai utilisé une adresse mail valide pourtant. la solution est la suivante:


  1. ouvrir IIS


  2. click droit sur "serveur virtuel SMTP par defaut" - propriétés


  3. dans l'onglet "Accès", cliquez sur le boutton "relais" (relay)


  4. assurez vous que 127.0.0.1 est ajouté et autorisé (granted). Si ce n'est pas le cas ajoutez le. Votre fenêtre devrait ressembler à ceci:



image




Mise à jour - 18 mai 2008:


Les paramètres d'envoi (adresse du serveur SMTP, nom d'utilisateur et mot de passe) peuvent être spécifiés dans le code de ma manière suivante:

public void SendMail()
{
//Déclaration du MailMessage
MailMessage mail = new MailMessage();
//Affectation des adresses mail
//emetteur(email, nom)
mail.From = new MailAddress("emetteur@domaine.com", "nom emetteur");
//destinataire
mail.To.Add("destinataire@domaine.com");
//objet du mail
mail.Subject = "mail test";
//corps du mail
mail.Body = "ceci est le corps du message.";
//envoi du message
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.domaine.com";
smtp.Credentials = new NetworkCredential("emetteur@domaine.com", "motdepasse");
smtp.Send(mail);
}

Vos commentaires sont les bienvenus.

3 commentaires:

Unknown a dit…

votre sujet m'a bien aide mais ce que je demande peut etre evident, si j'envoi localement un mot de passe un utilisateur, dans quel dossier sera stocke.
merci infiniment.

RAMZI Sanaa a dit…

navrée pour ce retard.
je n'ai pas de reponse immédiate à votre question, je fais une recherche et je reviens vers vous.
Sanaa

RAMZI Sanaa a dit…

Le stockage des infos des mails relève de la cuisine interne de IIS. Je n'ai pas pu trouver d'article traitant cet aspect en particulier.
Sachez cependant que dans C:\Inetpub\mailroot se trouvent des dossiers relatifs au serveur virtuel SMTP de IIS, il est possible que le mot de passe en transite.
Lorsque vous exécutez le code d'envoi de mail, votre mail reste en instance d’envoi un petit moment, et sous C:\Inetpub\mailroot\Queue se forme un fichier .EML qui comprend les informations du mail. Le contenu de ce fichier est le suivant :
____________________________________________________
Received: from UV ([127.0.0.1]) by UV with Microsoft SMTPSVC(6.0.2600.2180);
Sat, 17 May 2008 13:28:01 +0000
MIME-Version: 1.0
From: Sanaa from@domaine.com
To: to@domaine.com
Date: 17 May 2008 13:28:01 +0000
Subject: mail test
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Return-Path: from@domaine.com
Message-ID: UV1qsjxxH1yGy9x4EDD00000002@UV
X-OriginalArrivalTime: 17 May 2008 13:28:01.0171 (UTC) FILETIME=[D4161E30:01C8B821]

ceci est le corps du message.
_______________________________________________________________
Après l’envoi du mail, le dossier C:\Inetpub\mailroot\Queue est vide.

J’espère que ces informations vous sont utiles.

Sanaa RAMZI
Développeur ASP.NET