Saturday, December 10, 2011

Send a Html mail through outlook in asp.net mvc

images (1)
                 Recently we have  faced a situation to send a html formatted mail in our asp.net mvc application. We want to provide an option to users  to open their html formatted mails in outlook because user can edit the mail and can send it to their outlook contacts.Pramod tell me an idea it was quite enough to solve our problem.we have take the html from our template view and send it through smtpClient. we have used pickupDirectory option of webmail, using this we can send mail in to a particular directory, it will save as a .eml file. A custom action result will do all this things and download it as an outlook file. now user can send it by opening it in outlook
Here is the custom action result
public class MailResult : ActionResult    {  
       string _content;         
       string _viewName;         
       string _contentType = "message/rfc822";         
       dynamic _model;         
       string _fromMailAddress;         
       string _toMailAddress;                  
       public MailResult(string AViewName,dynamic AModel,string AFromMail,string AToMail)             {             
           _viewName = AViewName;             
           _model = AModel;             
          _fromMailAddress = AFromMail;             
          _toMailAddress=AToMail;         
        }         
       public override void ExecuteResult(ControllerContext context)         
        {  var view = ViewEngines.Engines.FindView(context, _viewName, null);             
           var ViewData = new ViewDataDictionary();             
           var TempData = new TempDataDictionary();             
           ViewData.Model = _model;             
           using (var writer = new StringWriter())             
            {                 
             var ccontext = new ViewContext(context, view.View, ViewData, TempData, writer);              ViewData.Model = _model;                 
             view.View.Render(ccontext, writer);                 
             writer.Flush();                 
             _content = writer.ToString();             
            }             
          System.Net.Mail.MailMessage msg = new MailMessage();             
          msg.From = new MailAddress(_fromMailAddress);             
         msg.To.Add(new MailAddress(_toMailAddress));             
          msg.IsBodyHtml = true;             
         msg.Body = _content;             
        SmtpClient smtp = new SmtpClient();             
        smtp.PickupDirectoryLocation 
          = context.HttpContext.Request.ServerVariables["APPL_PHYSICAL_PATH"];             
        smtp.PickupDirectoryLocation = smtp.PickupDirectoryLocation + @"\Content\Mail\";             Guid newGuId = Guid.NewGuid();             
        string fname = smtp.PickupDirectoryLocation + newGuId + ".eml";             
        //Save is an Extension method, using this we can specify the guid in to that ie; for            deleting        msg.Save(fname);             
        context.HttpContext.Response.Clear();             
        context.HttpContext.Response.AddHeader("Content-Disposition",string.Format("attachmen         t; filename={0}", "mail.eml"));             
         context.HttpContext.Response.Charset = "";             
         context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);       
         context.HttpContext.Response.ContentType = _contentType              
         context.HttpContext.Response.TransmitFile(fname);
         context.HttpContext.Response.End();             
         System.IO.File.Delete(fname); 
          }     
}



Extension Method:

(extension method source: codeproject)
public static class MailMessageExt
{     
   public static void Save(this MailMessage Message, string FileName)     
    {         
       Assembly assembly = typeof(SmtpClient).Assembly;
       Type _mailWriterType = assembly.GetType("System.Net.Mail.MailWriter"); 
       using (FileStream _fileStream = new FileStream(FileName, FileMode.Create)) 
        {             
          // Get reflection info for MailWriter contructor
           ConstructorInfo _mailWriterContructor = _mailWriterType.GetConstructor(                     BindingFlags.Instance | BindingFlags.NonPublic,null,new Type[] { typeof(Stream) },           null);             
          // Construct MailWriter object with our FileStream
            object _mailWriter = _mailWriterContructor.Invoke(new object[] { _fileStream });             // Get reflection info for Send() method on MailMessage
            MethodInfo _sendMethod 
     = typeof(MailMessage).GetMethod("Send",BindingFlags.Instance | BindingFlags.NonPublic);             // Call method passing in MailWriter            
           _sendMethod.Invoke(Message,BindingFlags.Instance | BindingFlags.NonPublic,                    null,new object[] { _mailWriter, true },null);             
           // Finally get reflection info for Close() method on our MailWriter
            MethodInfo _closeMethod = _mailWriter.GetType().GetMethod("Close",                           BindingFlags.Instance | BindingFlags.NonPublic); 
            // Call close method            
          _closeMethod.Invoke(_mailWriter,BindingFlags.Instance | BindingFlags.NonPublic,                 null,new object[] { },null);         
           }     
     }
}

Monday, November 7, 2011

Windows-8 Developer preview

         One week ago I've installed win-8 developer preview in ma desktop. some screen shots..



Monday, October 24, 2011

Android 4.0 (ice cream sandwich)

                       Android’s new version (4.0) released few days ago. lets check what are the new features are introduced by Google in ice cream sandwich to compete Apples ios 5.

nexus s

                

              Android 4.0, Ice Cream Sandwich brings an entirely new look and feel to Android. The lock screen, widgets, notifications, multi-tasking and everything in between has been rethought and refined to make Android simple, beautiful, and beyond smart.

 

 

 

Galaxy Nexus – Video

New features at a glance

  • Face Unlock

ice-cream-sandwich-android-4

       

           With Face Unlock on ice cream sandwich you can now unlock your phone with a smile. No complicated passwords to remember, just switch on your phone and look into the camera to quickly unlock your phone.

  • Android Beam

android beam

     

               Using this android feature you can easily share your contacts,websites,apps,maps,youtube videos etc by touching two android phones each other.

 

  • Voice typing

voice typing

     

    Use your voice to type Emails,SMS or any where you want to type texts

more to read:

  1. Android 4.0 Ice Cream Sandwich: everything you need to know
  2. Android Ice Cream Sandwich and Galaxy Nexus: Everything You Need to Know
  3. iOS 5 vs. Android 4.0 Ice Cream Sandwich vs. Windows Phone 7.5 Mango – Comparison

Sunday, October 9, 2011

Common Table Expression (CTE)

               few days ago I’ve written a  blog post in SQL server using CTE to find  Sundays. Lets dig some more deep in to this SQL server feature.

                                                        microsoft-sql-server-2008

    What is CTE

     The common table expression is a temporary named result set that can refer in a SELECT,INSERT, UPDATE or DELETE statement.

       simply a CTE is similar to a derived table but it is not stored as an object and lasts only for the duration of the query.

    Unlike a derived table, a CTE can be self referencing and can be referenced multiple times in the same query

we can use a CTE in View create statement also we can add CTE in to the new MERGE statement (In sql server 2008)

SQL Server support two types of CTEs

  • recursive
  • non recursive

 Syntax

A Common Table Expression contains three main parts:

  • The CTE name (this is what follows the WITH keyword)
  • The column list (optional)
  • The query (appears within parentheses after the AS keyword)

With CTE_Name (Column_Name_1, Column_Name_2 … Column_Name_n )
As
(
     cte_Query_Definition
)
--TSQL which uses the CTE

Some Examples

WITH Table1(Name,Designation,DateofJoin)
As   
(
    select CN.Name,D.Name,E.DateOfJoin from ContactName CN
    Inner join AM_Employee E on E.ContactId = CN.ContactId
    Inner join AM_Designation D on E.DesignationId = D.Id
)
select Name,Designation,DateofJoin from Table1

 

Sunday, September 25, 2011

ASP.NET MVC 4 Developer Preview



                 One week ago in Build conference Microsoft  announced a lot of their products latest versions developer previews. They are Including Windows 8, VS 2011, ASP.NET MVC 4 etc. In this post l would like to discuss about ASP.NET MVC 4 and lets check what are the new features are included in MVC 4 Developer preview.you can read more details about ASP.NET MVC 4 from asp.net site
http://www.asp.net/mvc/mvc4


Download links
         you can download and install the mvc-4 developer preview using the following links
Install ASP.NET MVC 4 using the Web Platform Installer
 Features at a glance:
        Cosmetic changes:
             Refreshed and modernized default project Template.
             New Template for mobile web applications.
        Other changes
             Adaptive Rendering.
             Redirect to different views based on requested device.
             Enhanced support for asynchronous methods.

                  
MVC team introduced a brand new default Template in MVC 4, using this we can create good looking websites with out much more design effort.

         New Registration and Login windows using JQuery UI
Mobile Application Template with jQuery Mobile
Mobile Log On
Mobile View Registration Form
you can read more details about asp.net mvc 4 developer preview from  Phill Hacck
and Scott Hanselman blog posts. you can read more about mobile features from here .

Tuesday, September 20, 2011

Select All option using jQuery

      selecting some more checkboxes is cumbersome and tedious. usually we are trying select all or Unselect All option by checking or unchecking one. Find the snippet of jQuery to select / unselect the check boxes from a table row by changing one check box value. 

Capture

Here the code:
$(".chkAll").change(function () 
     {           
       var checkState = $(this).attr('checked');
       var row = $(this).closest('tr')   
       $(row).find('input:checkbox').attr('checked', checkState);         
});
by changing the status of first checkbox,we can select or unselect the entire row of checkboxes.

first column checkboxes has contain a class " chkAlland call the jQuery function whenever a change occurred in that checkbox. set the current status of that (chkAll) checkbox in to a variable checkstate and then find the closest table row to the checkbox. After that find all check boxes from that row and change the status of all in to the variable value.

Sunday, July 31, 2011

Generate SQL Queries

select *from AM_DataSource

select 'Insert into AM_CalculationMaster(Id,Name,IsFinancialField,AccountNumber,EquationString)values('+ CAST(Id As Varchar(100))+','+ QUOTENAME(Name,'''')+',1,0,'+ IsNULL(QUOTENAME(EquationString,''''),'')+ ')' from Am_DataSource

 

Capture