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 was a very successful series in terms of views and downloads. Now in this article we will learn how to send emails directly from the razor view in ASP.NET MVC with the help of the WebMail helper class . So let's learn step by step, so beginners can also learn how to send emails in ASP.NET MVC.
What is WebMail Helper Class?
WebMail is the static class which is used to send emails directly from Razor View as well as the 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.
Step 1: Create an 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:
3. As shown in the preceding screenshot, click on Empty template and check MVC option, then click OK. This will create an empty MVC web application whose Solution Explorer will look like the following:
Now let us create the model class named EmployeeModel.cs by right-clicking on the model folder as in the following screenshot:
Note:
It is not mandatory that the Model class 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 folder names, 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:
After clicking on Add button it will show the window. specify the Controller name as Home with suffix Controller.
Note:
The controller name must have a suffix of 'Controller' after specifying the name of the 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
Right click on the View folder of the created application and choose Add View. Select employee model class and scaffolding to create a view to send emails.
Now open the Index.cshtml view. Then follow the default code, which you will see is generated by
The MVC scaffolding template as,
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> } }
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 the send button without entering To email address and an invalid cc and bcc email address, it throws the following errors .
Now Enter the valid details as follows,
After clicking on the Send button, it will redirect to the SendEmailView, which invokes the WebEmail class and sends the email. After successfully sending the email, the following message will be shown.
Now open your Gmail inbox and see the details which we have used to send the email as
Now open the email. It will show the email content as follows.
I hope from all the preceding examples we have learned how to send email using the 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