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.