public bool SendResetPasswordEmail(string userName, string htmlEmbedLink)
        {
            try
            {
                if (string.IsNullOrEmpty(userName))
                    return false;
                MailMessage mail = new MailMessage();

                SmtpClient smtpServer = new SmtpClient();
                mail.From = new MailAddress(supportEmail);
                mail.To.Add(userName);
                mail.Bcc.Add(supportEmail);
                mail.Subject = "Please reset your password within 48 hours upon receiving this email";
                mail.Body = string.Format(@"To reset your password, <a href='{0}'> please click the link and enter new password.</a>",
                    htmlEmbedLink);
                mail.IsBodyHtml = true;

                var emailToSave = new EmailModel();
                emailToSave.EmailTo = TextUtils.TokenDelimitedText(mail.To.ToList().Select(p => p.Address), ";");
                emailToSave.EmailFrom = mail.From.Address;
                emailToSave.Subject = mail.Subject;
                emailToSave.ContentHtml = emailToSave.ContentText = mail.Body;
                emailToSave.MailTypeId = lookupMgr.GetAllEmailTypes().FirstOrDefault(p => p.EmailTypeCd == "PWDRC").EmailTypeId;
                var emailMgr = new EmailManager();
                emailMgr.SaveEmail(emailToSave);

                smtpServer.Send(mail);
                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }    
        public ActionResult SendEmail(FormCollection collection)
        {
            try
            {
                var emailMgr = new EmailManager();
                MailMessage mail = new MailMessage();

                SmtpClient smtpServer = new SmtpClient();
                mail.From = new MailAddress(emailMgr.SupportEmail);
                mail.To.Add(emailMgr.SupportEmail);
                mail.Subject = "Request from Portal user";
                mail.Body = "How to recover password?";

                smtpServer.Send(mail);

                return RedirectToAction("Contact", "Home");
            }
            catch(Exception e)
            {
                return View("Contact");
            }
        }
 public ActionResult RetrievePassword(SecurityQuestionViewModel model)
 {
     model.IsAnswerStep = false;
     lookupMgr.GetAllSecurityQuestions().ToList()
         .ForEach(p => model.QuestionList.Add(new SelectListItem() { Text = p.SecurityQuestionDescription, Value = p.SecurityQuestionID.ToString() }));
     if (!ModelState.IsValid)
     {
         return View(model);
     }
     else
     {
         if (model.FirstAnswer.Equals(model.UserAnswer1)
              && model.SecondAnswer.Equals(model.UserAnswer2)
              && model.ThirdAnswer.Equals(model.UserAnswer3))
         {
             // reset password token expires in 2 days
             string resetPasswordToken = webSecurity.GeneratePasswordResetToken(model.UserName, 2880);
             string resetLink = this.Url.RouteUrl("ResetPwdRoute", new { controller = "Account", action = "ResetPassword", id = resetPasswordToken, usr = model.UserName }, this.Request.Url.Scheme);
             var emailMgr = new EmailManager();
             emailMgr.SendResetPasswordEmail(model.UserName, resetLink);
             //return RedirectToAction("SingleMessage", new { message = "An Email is sent to your account to reset your password." });
             return RedirectToAction("SingleMessageWithButton", new
             {
                 message = "An Email is sent to your account to reset your password.",
                 strController = "Account",
                 strAction = "Login",
                 strButton = "Go to login"
             });
         }
         else
         {
             ViewBag.Message = "One or more answers are incorrect."; 
             return View(model);
         }
     }
 }
        public ActionResult Register(UserViewModel model)
        {
            if (webSecurity.UserExists(model.UserName))
            {
                ModelState.AddModelError("UserExistsErr", "User with same user name already exists.");
                TempData["UserExists"] = true;
            }
            if (ModelState.IsValid)
            { 
                // Attempt to register the user
                try
                {
                    // randomly generate strong password, 9 characters long
                    model.Password = RandomPassword.Generate(9); 
                    string userToken = accountMgr.CreateUser(model);
                    int userId = webSecurity.GetUserId(model.UserName);
                    accountMgr.InitForceChangePassword(userId);
                    // save encrypted password history
                    accountMgr.SavePasswordHist(model.UserName, model.Password);
                    var emailMgr = new EmailManager();
                    string confirmLink = this.Url.Action("AgreementConfirm", "Account", new { id = userToken }, this.Request.Url.Scheme);
                    //emailMgr.SendRegisterUserEmail(model, confirmLink);
                    return RedirectToAction("ListUsers"); 
                }
                catch (MembershipCreateUserException e)
                {
                    ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        ExceptionManager.WriteToEventLog(string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                            eve.Entry.Entity.GetType().Name, eve.Entry.State), "Application", System.Diagnostics.EventLogEntryType.Error);
                        foreach (var ve in eve.ValidationErrors)
                        {
                            ExceptionManager.WriteToEventLog(string.Format("- Property: \"{0}\", Error: \"{1}\"",
                                ve.PropertyName, ve.ErrorMessage), "Application", System.Diagnostics.EventLogEntryType.Error);
                        }
                    }
                    throw;
                }
                catch (Exception e)
                {
                    throw new InvalidOperationException(string.Format("Error from creating user: {0}", e.InnerException.ToString()), e.InnerException);
                }
            }

            // If we got this far, something failed, redisplay form
            model = new UserViewModel();
            ModelState.Clear();

            //Roles.GetAllRoles().ToList().ForEach(p => model.AllRoles.Add(new SelectListItem() { Text = p, Value = p }));

            // get all time zone
            model.AllStates.Add(new SelectListItem() { Text = "Select State", Value = "Select" });
            accountMgr.GetAllStates().ToList().ForEach(p => model.AllStates.Add(new SelectListItem() { Text = p.Value, Value = p.Key }));
            return View(model);
        }