// GET: EmailMarketing
        public async Task <ActionResult> Index()
        {
            try
            {
                var model = new EmailMarketingViewModel();

                var strUrl    = ControllerName + APIProvider.APIGenerator(this, this.RouteData.Values["action"].ToString());
                var templates = await APIProvider.Authorize_Get <List <EmailMarketingViewModel> >(_userSession.BearerToken, strUrl, APIConstant.API_Resource_CORE, ARS.Get);

                ViewBag.Templates = templates;

                return(View(model));
            }
            catch (HttpException ex)
            {
                Logger.LogError(ex);
                int statusCode = ex.GetHttpCode();
                if (statusCode == 401)
                {
                    TempData["Alert"] = ApplicationGenerator.RenderResult(FuntionType.Department, APIConstant.ACTION_ACCESS);
                    return(new HttpUnauthorizedResult());
                }

                throw ex;
            }
        }
        public async Task <ActionResult> Process(EmailMarketingViewModel model)
        {
            model.CreatedDate  = DateTime.Now.ToString("yyyy-MM-dd");
            model.CreatedUser  = _userSession.UserName;
            model.ModifiedDate = DateTime.Now.ToString("yyyy-MM-dd");
            model.ModifiedUser = _userSession.UserName;
            if (ModelState.IsValid)
            {
                try
                {
                    //Send email
                    var strUrl = APIProvider.APIGenerator(ControllerName, APIConstant.ACTION_SEND);

                    //Save template
                    if (model.Type == "2")
                    {
                        strUrl = APIProvider.APIGenerator(ControllerName, APIConstant.ACTION_INSERT);
                    }
                    var result = await APIProvider.Authorize_DynamicTransaction <EmailMarketingViewModel, int>(model, _userSession.BearerToken, strUrl, APIConstant.API_Resource_CORE, ARS.Edit);

                    if (result > 0)
                    {
                        TempData["Alert"] = ApplicationGenerator.RenderResult(ApplicationGenerator.TypeResult.SUCCESS, ApplicationGenerator.GeneralActionMessage(ValueConstant.ACTION_SEND, ApplicationGenerator.TypeResult.SUCCESS));
                        if (model.Type == "2")
                        {
                            TempData["Alert"] = ApplicationGenerator.RenderResult(ApplicationGenerator.TypeResult.SUCCESS, ApplicationGenerator.GeneralActionMessage(ValueConstant.ACTION_INSERT, ApplicationGenerator.TypeResult.SUCCESS));
                        }
                    }
                    else
                    {
                        TempData["Alert"] = ApplicationGenerator.RenderResult(ApplicationGenerator.TypeResult.FAIL, ApplicationGenerator.GeneralActionMessage(ValueConstant.ACTION_SEND, ApplicationGenerator.TypeResult.FAIL));
                        if (model.Type == "2")
                        {
                            TempData["Alert"] = ApplicationGenerator.RenderResult(ApplicationGenerator.TypeResult.FAIL, ApplicationGenerator.GeneralActionMessage(ValueConstant.ACTION_INSERT, ApplicationGenerator.TypeResult.FAIL));
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.LogError(ex);
                    TempData["Alert"] = ApplicationGenerator.RenderResult(ApplicationGenerator.TypeResult.ERROR, ApplicationGenerator.GeneralActionMessage(ValueConstant.ACTION_READ, ApplicationGenerator.TypeResult.ERROR));
                }
                return(RedirectToAction("Index"));
            }

            var apiUrl    = ControllerName + APIProvider.APIGenerator(this, this.RouteData.Values["action"].ToString());
            var templates = await APIProvider.Authorize_Get <List <EmailMarketingViewModel> >(apiUrl, APIConstant.API_Resource_CORE);

            ViewBag.Templates = templates;
            return(View("Index", model));
        }
        public async Task <int> Transaction(EmailMarketingViewModel model, char action)
        {
            if (action == 'S')
            {
                await SendMail(model);

                return(1);
            }
            else
            {
                var data = Mapper.Map <EmailMarketing>(model);
                return(await _emailMarketingRepo.Transaction(data, action));
            }
        }
        public async Task <IHttpActionResult> SendMail(EmailMarketingViewModel model)
        {
            try
            {
                var message = new MailMessage();
                //Get list email by EmailGroupType
                var listEmail = await GetEmailByGroupType(model.EmailGroupType);


                //Mail from
                var config = new MailSetting
                {
                    Port  = 587,
                    Host  = "smtp.gmail.com",
                    Email = "*****@*****.**",
                    Pwd   = "P@sswordFPT",
                    IsSSL = true
                };

                foreach (var email in listEmail)
                {
                    //Mail to
                    var mail = new Mail
                    {
                        Email   = email,
                        Subject = model.Name,
                        Body    = model.Detail
                    };
                    Mailer.ServerSendMail(config, mail);
                }
                return(Ok());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }