Tuesday, 28 November 2017

Sending Emails In ASP.NET MVC From Controller Using WebMail Helper

 Sending Emails In ASP.NET MVC From Controller Using WebMail Helper

Email communication is very important in today's modern applications and there are many ways to send emails through applications to users.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.

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.


ASP.NET WebMail is a class, that works with the email stuff on your website. This class is a helper class, which as MSDN says, "is a component that simplifies web programming in ASP.NET Web Pages". It is a part of .NET Framework's Web Helpers class. You can access this class in many ways, if you're having a .cshtml page (the C# embedded HTML page) where all the classes and namespaces required are compiled within or you can also use this class using its direct class name and access it inside any .cs (C# Class) file.


System.Web.Helpers.WebMail;
This would enable this WebMail feature in your website. After this, you can easily access its properties and methods in your code and send the WebMail (email) from your website or your program software.

Like all other classes, WebMail also has some methods and properties that you can use and customize your service. The built-in members (properites) of the WebMail class are as follows:




One thing I want to make clear here. There is a difference between From and UserName field. The difference is, UserName is used to connect to the server, whereas From field is just passed as a String to the server to tell the From field only. UserName and Password are used to login to the server, they're the same that were provided to you while signing up. For example, my Gmail account is: justinxxxxx@gmail.com password ******, I would pass this to the UserName and Password fields and the From field can be my brother's email too or my company email, etc.
Do keep the above stated paragraph in mind!

Now let's talk about the methods provided by the WebMail class, as we know this is an email related class so there is only one method provided by it. It is:

public static void Send(
    string to,
    string subject,
    string body,
    string from,
    string cc,
    IEnumerable<string> filesToAttach,
    bool isBodyHtml,
    IEnumerable<string> additionalHeaders,
    string bcc,
    string contentEncoding,
    string headerEncoding,
    string priority,
    string replyTo
)

The only method this class provides is the Send method which is used to send the email. You don't need to configure this class or the instance you create like you did in the MailMessage you just pass the parameters and WebMail handles it all.


The only required parameters would be discussed here, remaining are just optional. Whether you provide them or not, WebMail doesn't care about it. One more thing, and it is the most interesting is that you don't need to keep the sequence in mind. You can pass them in any order, just remember to pass the first three parameters in order. Since they're required.
  1. to (string)
    This is the email address of the receiver.
  2. subject (string)
    The subject for the email being sent. A short message to describe the email.
  3. body (string)
    This is the parameter that has all of the email body content. You pass the entire HTML that would form the email body of the web mail in this parameter. You can attach images to the document you can stylize the HTML content using the HTML codes for bold, italic, etc.
  4. isBodyHtml (bool)
    Used to indicate that the HTML inside the body parameter should be rendered as an HTML markup instead of plain string.
The remaining parameters are not as much required and the email would be sent using just these parameters. Even though the isBodyHtml parameter was also not required one, but I thought it was worth mentioning.

 U Can Send Mail Using the Following  Code

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.
Now let us start with a step by step approach from the creation of a simple MVC application as in the following:
  1. "Start", then "All Programs" and select "Microsoft Visual Studio 2015".
  2. Go to File->New Project->ASP.NET Web Application , then provide the Project a name as you wish and click OK. After clicking, the following window will appear:  

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:
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:



Note: 
It is not mandatory that Model class should be in 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 name or in a separate class library.
EmployeeModel.cs class code snippet:


  1. using System.ComponentModel.DataAnnotations;  
  2.   
  3. namespace SendingEmailsWithWebMailInMVC.Models  
  4. {  
  5.     public class EmployeeModel  
  6.     {           
  7.          
  8.         [DataType(DataType.EmailAddress),Display(Name ="To")]  
  9.         [Required]  
  10.         public string ToEmail { getset; }  
  11.         [Display(Name ="Body")]  
  12.         [DataType(DataType.MultilineText)]  
  13.         public string EMailBody { getset; }  
  14.         [Display(Name ="Subject")]  
  15.         public string EmailSubject { getset; }  
  16.         [DataType(DataType.EmailAddress)]  
  17.         [Display(Name ="CC")]  
  18.         public string EmailCC { getset; }  
  19.         [DataType(DataType.EmailAddress)]  
  20.         [Display(Name ="BCC")]  
  21.         public string EmailBCC { getset; }  
  22.     }  
  23. }  
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 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
  1. using System.Web.Mvc;  
  2.   
  3. namespace SendingEmailsWithWebMailInMVC.Controllers  
  4. {  
  5.     public class HomeController : Controller  
  6.     {  
  7.         // GET: Index view  
  8.         public ActionResult Index()  
  9.         {             
  10.             return View();  
  11.         }  
  12.   
  13.         [HttpPost]  
  14.           
  15.         public ActionResult SendEmailView()  
  16.         {  
  17.             //call SendEmailView view to invoke webmail  
  18.             return View();  
  19.         }  
  20.     }  
  21. }  
tep 4 : Creating strongly typed view named Index using employee model and SendEmailView .
Right click on View folder of created application and choose add view , select employee model class and scaffolding create template to create view to send emails

Now open the Index.cshtml view , Then following default code you will see which is generated by MVC scaffolding template as,

Index.cshtml
  1. @model SendingEmailsWithWebMailInMVC.Models.EmployeeModel  
  2.   
  3. @{  
  4.     ViewBag.Title = "www.compilemode.com";  
  5. }  
  6. @*Send request to invoke SendEmailView view*@  
  7. @using (Html.BeginForm("SendEmailView","Home",FormMethod.Post))   
  8. {  
  9.     @Html.AntiForgeryToken()  
  10.     <div class="form-horizontal">      
  11.         <hr />  
  12.         @Html.ValidationSummary(true, "", new { @class = "text-danger" })  
  13.         <div class="form-group">  
  14.             @Html.LabelFor(model => model.ToEmail, htmlAttributes: new { @class = "control-label col-md-2" })  
  15.             <div class="col-md-10">  
  16.                 @Html.EditorFor(model => model.ToEmail, new { htmlAttributes = new { @class = "form-control" } })  
  17.                 @Html.ValidationMessageFor(model => model.ToEmail, "", new { @class = "text-danger" })  
  18.             </div>  
  19.         </div>  
  20.   
  21.         <div class="form-group">  
  22.             @Html.LabelFor(model => model.EMailBody, htmlAttributes: new { @class = "control-label col-md-2" })  
  23.             <div class="col-md-10">  
  24.                 @Html.EditorFor(model => model.EMailBody, new { htmlAttributes = new { @class = "form-control" } })  
  25.                 @Html.ValidationMessageFor(model => model.EMailBody, "", new { @class = "text-danger" })  
  26.             </div>  
  27.         </div>  
  28.   
  29.         <div class="form-group">  
  30.             @Html.LabelFor(model => model.EmailSubject, htmlAttributes: new { @class = "control-label col-md-2" })  
  31.             <div class="col-md-10">  
  32.                 @Html.EditorFor(model => model.EmailSubject, new { htmlAttributes = new { @class = "form-control" } })  
  33.                 @Html.ValidationMessageFor(model => model.EmailSubject, "", new { @class = "text-danger" })  
  34.             </div>  
  35.         </div>  
  36.   
  37.         <div class="form-group">  
  38.             @Html.LabelFor(model => model.EmailCC, htmlAttributes: new { @class = "control-label col-md-2" })  
  39.             <div class="col-md-10">  
  40.                 @Html.EditorFor(model => model.EmailCC, new { htmlAttributes = new { @class = "form-control" } })  
  41.                 @Html.ValidationMessageFor(model => model.EmailCC, "", new { @class = "text-danger" })  
  42.             </div>  
  43.         </div>  
  44.   
  45.         <div class="form-group">  
  46.             @Html.LabelFor(model => model.EmailBCC, htmlAttributes: new { @class = "control-label col-md-2" })  
  47.             <div class="col-md-10">  
  48.                 @Html.EditorFor(model => model.EmailBCC, new { htmlAttributes = new { @class = "form-control" } })  
  49.                 @Html.ValidationMessageFor(model => model.EmailBCC, "", new { @class = "text-danger" })  
  50.             </div>  
  51.         </div>  
  52.   
  53.         <div class="form-group">  
  54.             <div class="col-md-offset-2 col-md-10">  
  55.                 <input type="submit" value="Send" class="btn btn-default" />  
  56.             </div>  
  57.         </div>  
  58.     </div>  
  59.      
  60. }  
  61.   
  62. <script src="~/Scripts/jquery-1.10.2.min.js"></script>  
  63. <script src="~/Scripts/jquery.validate.min.js"></script>  
  64. <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>  
The preceding view is used to Get the Input email details from users , Now create the view named SendEmailView to configure the emails using WebMail class.

SendEmailView.cshtml
  1. @{  
  2.     ViewBag.Title = "www.compilemode.com";  
  3. }  
  4.   
  5.   @{  
  6.       try  
  7.       {  
  8.           //parameters to send email  
  9.           string ToEmail, FromOrSenderEmail = "YourGamilId@gmail.com", SubJect, Body, cc, Bcc;  
  10.   
  11.           //Reading values from form collection (Querystring) and assigning values to parameters  
  12.           ToEmail = Request["ToEmail"].ToString();  
  13.           SubJect = Request["EmailSubject"].ToString();  
  14.           Body = Request["EMailBody"].ToString();  
  15.           cc = Request["EmailCC"].ToString();  
  16.           Bcc = Request["EmailBCC"].ToString();  
  17.           //Configuring webMail class to send emails  
  18.           WebMail.SmtpServer = "smtp.gmail.com"//gmail smtp server  
  19.           WebMail.SmtpPort = 587; //gmail port to send emails  
  20.           WebMail.SmtpUseDefaultCredentials = true;  
  21.           WebMail.EnableSsl = true//sending emails with secure protocol  
  22.           WebMail.UserName = FromOrSenderEmail;//EmailId used to send emails from application  
  23.           WebMail.Password = "YourGmailPassword";  
  24.           WebMail.From = FromOrSenderEmail; //email sender email address.  
  25.   
  26.           //Sending email  
  27.           WebMail.Send(to: ToEmail, subject: SubJect, body: Body, cc: cc, bcc: Bcc, isBodyHtml: true);  
  28.         <hr />  
  29.         <div class="text-success">  
  30.             Email Sent Successfully.  
  31.         </div>  
  32.       }  
  33.       catch (Exception)  
  34.       {  
  35.         <div class="text-danger">  
  36.             Problem while sending email, please check gmail server details.  
  37.         </div>  
  38.       }  
  39. }  
Now after adding the model , view and controller our application solution explorer will look as follows,

Now we have done all coding to send emails using WebMail class .
Step 5 : Now run the application.

Wednesday, 8 November 2017

Managing a huge number of database records related to a particular entity is very difficult in today's modern applications. For example,one customer can purchase multiple types of items, so in this case case the customer is a single entity and the items he is purchasing are different entities having multiple records with dynamic entries where we don't know the count. So in this scenario it's very difficult to manage the database table structure, so this  article is related to Solve this issue .


Follow the following steps in order to implement “Bulk Data Insertion in ASPMVC”.

Step-1 : Create Following tables in SQL Server

Here I have Created 2 tables – 1) the First table that you are watching in the image(image 2) is  PerosnalDetails   Table.   2) The second Table that you are watching in the image (image 1) is QualificationTbl.  1st Image is the Output of that Form From where I will insert records in these tables.

Here, with the help of this form, i will fill students records(Personal+Qualifications).A Student can have more than one qualifications so here we have to use "Concept" Bulk Data Insertion.

Step 1: Create an MVC Application.
Now let us start with a step by step approach from the creation of a simple MVC application as in the following:
  1. create a New ASPMVC4 Application Named "MVCApplication46"
  2. Go to File->New->Project->ASP.NET MVC4 Web Application .Then Provide the Project Name as you wish.After clicking, the following window will appear :
  1. As shown in the preceding screenshot, click on the Basic template, then click OK. This will create an empty MVC web application.
Step 2: Add The Reference of Dapper ORM into Project.

Now the next step is to add the reference of Dapper ORM into our created MVC Project. Here are the steps:
        Right click on Solution, find Manage NuGet Package manager and click on it.
  1. After as shown in the image and type in search box "dapper".
  2. Select Dapper as shown in the image.
  3. Choose the version of the dapper library and click on install button.


    After installing the Dapper library, it will be added into the References of our solution explorer of MVC application such as:


    Step 3: Create Model Class.
    Now let's create the model class named PerosnalDetails.cs by right-clicking on model folder  and 
    also, Create one More Class To Map Students With  Qualifications  - QualificationDetails.cs

    Go to Solution Explorer -> Right Click on Models Folder ->Add -> Class ->Write the Name of class “PerosnalDetails.cs”.
     Note: 
    It is not mandatory that Model class should be in Models 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 the folder name or in a separate class library.

    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.ComponentModel.DataAnnotations;  
    4.   
    5. namespace MVCApplication46.Models  
    6. {  
    7.     public class EmployeeModel  
    8.       { 
    9.         public int    ID { getset; }  
    10.         public string Name { getset; }  
    11.         public string Dob { getset; }  
    12.         public string State{get;set;}
    13.         public string District{get;set;}
    14.         public string Email{get;set;}
    15.         public List<QualificationDetails>Products { getset; }    
    16.     }  
    17.     public class QualificationDetails
    18.     {  
    19.          public string ClassName{get;set;}
    20.          public string Board    getset; }  
    21.          

    22.     }