Email communication is very important in today's modern
applications and there are many ways to send emails through applications
to users. I wrote a series of articles on email sending in ASP.NET
which is very successful series in terms of views and downloads. Now in
this article we will learn how to send emails directly from razor view
in ASP.NET MVC with the help of WebMail helper class . So let's learn
step by step so beginners can also learn how to send emails in ASP.NET
MVC.
Prerequisites
Now let us create the model class named EmployeeModel.cs by right clicking on model folder as in the following screenshot:
What is WebMail Helper Class?
WebMail is the static class which is used to send emails directly from Razor view as well controller class in ASP.NET MVC .Prerequisites
- Active internet connection.
- Email id of any provider such as Gmail, Yahoo or your organization to send emails.
Now let's create a simple MVC application to demonstrate this.
Now let us start with a step by step approach from the creation of a simple MVC application as in the following:Step 1: Create an ASP.NET MVC Application.
- "Start", then "All Programs" and select "Microsoft Visual Studio 2015".
- "File", then "New" and click "Project", then select "ASP.NET Web Application Template", then provide the Project a name as you wish and click OK. After clicking, the following window will appear:
Step 2: Create Model Class.
Now let us create the model class named EmployeeModel.cs by right clicking on model folder as in the following screenshot:It is not mandatory that the Model class should be in the Model folder, it is just for better readability you can create this class anywhere in the solution explorer. This can be done by creating different folder names or without a folder name or in a separate class library.
EmployeeModel.cs class code snippet:
using System.ComponentModel.DataAnnotations; namespace SendingEmailsWithWebMailInMVC.Models { public class EmployeeModel { [DataType(DataType.EmailAddress),Display(Name ="To")] [Required] public string ToEmail { get; set; } [Display(Name ="Body")] [DataType(DataType.MultilineText)] public string EMailBody { get; set; } [Display(Name ="Subject")] public string EmailSubject { get; set; } [DataType(DataType.EmailAddress)] [Display(Name ="CC")] public string EmailCC { get; set; } [DataType(DataType.EmailAddress)] [Display(Name ="BCC")] public string EmailBCC { get; set; } } }
Step 3 : Add Controller Class.
Now let us add the MVC 5 controller as in the following screenshot:Note:
The controller name must be having suffix as 'Controller' after
specifying the name of controller. Now the default code in
HomeController.cs will look like as follows,
HomeController.cs
using System.Web.Mvc; namespace SendingEmailsWithWebMailInMVC.Controllers { public class HomeController : Controller { // GET: Index view public ActionResult Index() { return View(); } [HttpPost] public ActionResult SendEmailView() { //call SendEmailView view to invoke webmail return View(); } } }
Step 4 : Creating strongly typed view named Index using employee model and SendEmailView .
Index.cshtml
@model SendingEmailsWithWebMailInMVC.Models.EmployeeModel @{ ViewBag.Title = "www.compilemode.com"; } @*Send request to invoke SendEmailView view*@ @using (Html.BeginForm("SendEmailView","Home",FormMethod.Post)) { @Html.AntiForgeryToken() <div class="form-horizontal"> <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.ToEmail, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.ToEmail, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.ToEmail, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.EMailBody, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.EMailBody, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.EMailBody, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.EmailSubject, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.EmailSubject, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.EmailSubject, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.EmailCC, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.EmailCC, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.EmailCC, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.EmailBCC, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.EmailBCC, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.EmailBCC, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Send" class="btn btn-default" /> </div> </div> </div> } <script src="~/Scripts/jquery-1.10.2.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
SendEmailView.cshtml
@{ ViewBag.Title = "www.compilemode.com"; } @{ try { //parameters to send email string ToEmail, FromOrSenderEmail = "YourGamilId@gmail.com", SubJect, Body, cc, Bcc; //Reading values from form collection (Querystring) and assigning values to parameters ToEmail = Request["ToEmail"].ToString(); SubJect = Request["EmailSubject"].ToString(); Body = Request["EMailBody"].ToString(); cc = Request["EmailCC"].ToString(); Bcc = Request["EmailBCC"].ToString(); //Configuring webMail class to send emails WebMail.SmtpServer = "smtp.gmail.com"; //gmail smtp server WebMail.SmtpPort = 587; //gmail port to send emails WebMail.SmtpUseDefaultCredentials = true; WebMail.EnableSsl = true; //sending emails with secure protocol WebMail.UserName = FromOrSenderEmail;//EmailId used to send emails from application WebMail.Password = "YourGmailPassword"; WebMail.From = FromOrSenderEmail; //email sender email address. //Sending email WebMail.Send(to: ToEmail, subject: SubJect, body: Body, cc: cc, bcc: Bcc, isBodyHtml: true); <hr /> <div class="text-success"> Email Sent Successfully. </div> } catch (Exception) { <div class="text-danger"> Problem while sending email, please check gmail server details. </div> } }
Now we have done all coding to send emails using WebMail class.
Step 5 : Now run the application.
After running the application initial screen will look as follows,
The preceding view is used to send the emails , now click on send button
without entering To email address and invalid cc and Bcc email address
it throws the following errors.
Now Enter the valid details as follows,
I hope from all the preceding examples we have learned how to send email using WebMail helper class in ASP.NET MVC Razor view.
Note:
Note:
- Since this is a demo, it might not be using proper standards, so improve it depending on your skills.
- This application is created completely focusing on beginners.
- You need an active internet connection to send the email .
I hope this article is useful for all readers. If you have any suggestions please contact me.
Read more articles on ASP.NET MVC:
- ActionResult in ASP.NET MVC.
- ViewBag In ASP.NET MVC
- ViewData In ASP.NET MVC
- TempData In ASP.NET MVC
- Bind DropDownList Using ViewBag
- Creating an ASP.NET MVC Application.
- CRUD Operations In ASP.NET MVC 5 Using ADO.NET.
- Read Strongly Typed Control Values Using jQuery In ASP.NET MVC .
- Understanding The Folder Structure of ASP.NET MVC Application
Post a Comment