Monday, 25 April 2016

Email Factory to use email sending in background

No comments
GenericListAppconfig.cs
---------------------------------
public class GenericListAppconfig
    {
        private static GenericListAppconfig _GenericListAppconfig = new GenericListAppconfig();
        UnitOfWork uom = new UnitOfWork();
        private GenericListAppconfig()
        {

        }

        public static GenericListAppconfig intance
        {
            get{
                return _GenericListAppconfig;
            }
        }

        public List<AppConfig> GetAppConfigData(string groupName)
        {
            var appConfigData = uom.Repository<AppconfigRepository>();
            var appConfigList = appConfigData.GetAllAppConfig(groupName);
            return appConfigList.ToList();
        }      
    }
 


EmailNotification.cs
------------------------------
 public void SendMail(string toEmail, string subject,string fromEmail, string body,string attachmentFile)
        {
            MailMessage mail = new MailMessage();
            var appDataList = GenericListAppconfig.intance.GetAppConfigData("smtp");
            SmtpClient smtpServer = new SmtpClient(appDataList.FirstOrDefault(x => x.name == "smtp.host").Value);
            smtpServer.UseDefaultCredentials = true;          
            smtpServer.Credentials = new System.Net.NetworkCredential(appDataList.FirstOrDefault(x => x.name == "smtp.username").Value, appDataList.FirstOrDefault(x =>                                                                             x.name == "smtp.password").Value);

            if (!string.IsNullOrEmpty(attachmentFile))
            {
                System.Net.Mail.Attachment attachment;
                attachment = new System.Net.Mail.Attachment(attachmentFile);
                mail.Attachments.Add(attachment);
            }

            smtpServer.Port = Convert.ToInt32(appDataList.FirstOrDefault(x => x.name == "smtp.port").Value);        
            smtpServer.EnableSsl = true;
         
            mail.From = new MailAddress(fromEmail);
            mail.IsBodyHtml = true;
            mail.To.Add(toEmail);
            mail.Subject = subject;
            mail.Body = body;
            mail.Priority = MailPriority.High;
            Task.Factory.StartNew(() => smtpServer.Send(mail), TaskCreationOptions.LongRunning);
         
        }


using EmailNotification in controller
----------------------------------------------

 string filePath = Server.MapPath("~/" + Express.Web.Models.GenericListAppconfig.intance.GetAppConfigData("Client").FirstOrDefault(x => x.name == "Client.path").Value + "/" + id + "/" + id + ".pdf");

            EmailNotification EmailNotification = new Utils.EmailNotification();
            var appDataList = GenericListAppconfig.intance.GetAppConfigData("smtp");
            EmailNotification.SendMail(email, "Shipment Details", appDataList.FirstOrDefault(x => x.name == "smtp.noreply").Value, htmlBody.ToString(), filePath);