public async Task <ActionResult> RecuperarClave(RecuperarClaveModel model) { if (ModelState.IsValid) { // Obtener el usuario y verificar que existe y pertenece a la aplicación actual. Usuario user = await UserManager.FindByNameAsync(model.Email); if (user == null || user.Aplicaciones.All(a => a.AplicacionID != Aplicacion.AplicacionID)) { // Si no existe o no pertenece a la aplicación actual, notificar. return(Json(new { resul = false, mensaje = Txt.Account.EmailNoEncontrado })); } // Si el usuario existe y pertenece a la aplicación actual, obtener un token para resetear // la clave y enviarlo a la dirección de email. string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); string callbackUrl = Url.Action(actionName: "ResetPassword", controllerName: "Account", routeValues: new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); string logoPath = HttpContext.Server.MapPath("~/Content/Images/PushNews-150.png"); RestablecerClave modeloEmail = new RestablecerClave(callbackUrl, user.Nombre, logoPath); string cuerpo = RenderToString("~/Areas/Backend/Views/PlantillasEmail/RestablecerClave.cshtml", modeloEmail); await EmailService.EnviarEmailRecuperarClave(user.Email, cuerpo, modeloEmail); return(Json(new { resul = true, mensaje = Txt.Account.ClaveReseteada })); } else { return(Json(new { resul = false, mensaje = Util.SerializarErroresModelo(ModelState) })); } }
public async Task EnviarEmailRecuperarClave(string destinatario, string cuerpo, RestablecerClave modelo) { AlternateView html = AlternateView.CreateAlternateViewFromString(cuerpo, Encoding.UTF8, "text/html"); LinkedResource logo = new LinkedResource(modelo.RutaLogo); logo.ContentId = "logo"; html.LinkedResources.Add(logo); MailMessage msg = PrepararMensaje(destinatario, Txt.Account.RestablecerClaveEmailAsunto, true); msg.AlternateViews.Add(html); await SendAsync(msg); }