Ecriture d’une simple fonction d’envoi des mails dans une application ASP.NET MVC 3 avec le Helper Razor WebMail

J’avais déjà blogué précédemment sur le Helper Razor Chart et présenté quelques autres Helpers dans mon article sur Razor.

Je vais aujourd’hui m’attarder sur un autre Helper Razor qui m’a été d’une grande utilité récemment pour implémenter une nouvelle fonctionnalité dans une application Web.

En effet, je devais intégrer une fonction pour envoyer des mails dans l’application Web que j’avais migré récemment d’ASP.NET MVC 2 vers ASP.NET MVC 3.

Au lieu de procéder de façon standard comme j’en avais l’habitude, j’ai jeté un rapide coup d’œil sur le Helper Razor WebMail qui m’a permis en l’espace de quelques minutes d’écrire mon module d’envoi des mails, au point ou je n’ai pas pu m’empêcher d’utiliser le temps de libre qui me restait pour écrire ce billet de blog sur ce composant.

Je vais donc vous montrer dans ce petit article comment configurer le WebMail Helper et l’utiliser dans une application ASP.MVC 3 pour l’expédition des mails.

Vous devez disposer de Visual Studio 2010 et ASP.NET MVC 3. Dans votre projet, vous allez dans un premier temps créer le modèle qui sera utilisé.

Pour la validation des données, j’ai utilisé les DataAnnotations. Le code du modèle est le suivant :

public class WebMailModel
{

[Required(ErrorMessage = "L'adresse mail est obligatoire")]
[DataType(DataType.EmailAddress)]
[Display(Name = "Adresse mail")]
public string AMail { get; set; }
[Required(ErrorMessage = "L'objet est obligatoire")]
[Display(Name = "Objet")]
public string MObjet { get; set; }
[Display(Name = "Corps du message")]
public string MCorps { get; set; }
}

Nous allons maintenant créer l’action du contrôleur dans le dossier correspondant.

Le contrôleur doit contenir les méthodes suivantes :

//
// GET: /WebMailModel/
public ActionResult MailSend()
{
return View();
}

//
// POST: /WebMailModel/
[HttpPost]
public ActionResult MailSend(WebMailModel M)
{

}

Dans la méthode post, nous allons écrire le code permettant d’envoyer des mails en utilisant le Helper WebMail.

Dans un premier temps, nous allons ajouter un bloc If qui nous permettra de vérifier la validation des données. Ensuite nous devons configurer la classe WebMail en fournissant le nom du serveur STMP. Vous pouvez également définir un compte utilisateur et un port si cela est requis par votre serveur de messagerie en fournissant des valeurs pour les attributs UserName, Password, SmtpPort.

La méthode Send du Helper Webmail sera ensuite utilisée pour envoyer le mail, en passant en paramètre l’adresse du destinataire, l’objet du message, le corps du message et enfin l’adresse de l’expéditeur.

En cas d’erreur (serveur SMTP incorrect par exemple), un message sera affiché dans le formulaire avec le tracé de la pile de l’erreur. Sinon, l’utilisateur sera rédirectionné vers une page de confirmation de l’envoi du message. Le code complet de cette méthode est le suivant :

public ActionResult MailSend()
{
return View();
}

[HttpPost]
public ActionResult MailSend(WebMailModel M)
{
if (ModelState.IsValid)
{
try
{
WebMail.SmtpServer = "mail.monserveur.com";
WebMail.Send(M.AMail, M.MObjet, M.MCorps, "st@monserveur.com");

}

catch (Exception Ex)
{

ViewData.ModelState.AddModelError("Error", Ex.Message);

}

return RedirectToAction("Index", "Accueil");
}

return View();
}

Nous allons enfin générer la vue fortement typée associée à l’action MailSend(). Je ne vais pas m’attarder dessus. Pour cela, je vous renvois à mon billet de blog sur la création d’un formulaire Razor avec ASP.NET MVC 3 pour voir comment créer une vue fortement typée.

Le code de votre vue doit ressembler à ceci.


@model MvcApplication2.Models.WebMailModel

@{
ViewBag.Title = "MailSend";
}

<h2>Envoyez vos suggestions par Mail</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>WebMailModel</legend>

<div class="editor-label">
@Html.LabelFor(model => model.AMail)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.AMail)
@Html.ValidationMessageFor(model => model.AMail)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.MObjet)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MObjet)
@Html.ValidationMessageFor(model => model.MObjet)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.MCorps)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.MCorps)
@Html.ValidationMessageFor(model => model.MCorps)
</div>

<p>
<input type="submit" value="Envoyer" />
</p>
</fieldset>
}

Et à l’exécution vous obtiendrez le résultat suivant :

Et voilà ;), nous venons en l’espace de quelques minutes de mettre sur pied notre fonction d’expédition de mails.

Vous vous rendre compte une fois de plus de la puissance de ces méthodes d’aides introduites par Razor qui fournissement un moyen simple et cohérent d’effectuer des tâches de développement Web dynamique qui, autrement, exigeraient beaucoup de code personnalisé.

Référence :

Description de la classe WebMail.

Laisser un commentaire