public ActionResult Subscribe(string email) { if (bool.TryParse(CommonHelper.SystemSettings["DisabledEmailBroadcast"], out var disabled) && disabled) { return(ResultData(null, false, CommonHelper.SystemSettings["DisabledEmailBroadcastTip"])); } Broadcast entity = BroadcastService.GetFirstEntity(b => b.Email.Equals(email, StringComparison.InvariantCultureIgnoreCase)); var guid = Guid.NewGuid(); if (entity != null) { if (entity.Status == Status.Subscribed) { return(ResultData(null, false, "您已经订阅过了,无需再重复订阅!")); } entity.ValidateCode = guid.ToString(); entity.UpdateTime = DateTime.Now; BroadcastService.UpdateEntity(entity); } else { BroadcastService.AddEntity(new Broadcast() { Email = email, ValidateCode = guid.ToString(), Status = Status.Subscribing, UpdateTime = DateTime.Now }); } try { var ts = DateTime.Now.GetTotalMilliseconds(); string link = Url.Action("Subscribe", "Subscribe", new { email, act = "verify", validate = guid, timespan = ts, hash = (email + "verify" + guid + ts).AESEncrypt(AppConfig.BaiduAK) }, "http"); BackgroundJob.Enqueue(() => CommonHelper.SendMail(CommonHelper.SystemSettings["Title"] + "博客订阅:" + Request.Host, System.IO.File.ReadAllText(_hostingEnvironment.WebRootPath + "/template/subscribe.html").Replace("{{link}}", link), email)); BroadcastService.SaveChanges(); return(ResultData(null, message: "订阅成功,请打开您的邮箱确认操作后便可收到订阅更新!")); } catch (Exception e) { LogManager.Error(GetType(), e); return(ResultData(null, false, "订阅失败,这可能是服务器出现了一点问题,去留言板给站长反馈吧!")); } }
/// <summary> /// 邮箱订阅 /// </summary> /// <param name="email"></param> /// <param name="act"></param> /// <param name="validate"></param> /// <param name="timespan"></param> /// <param name="hash"></param> /// <returns></returns> public ActionResult Subscribe(string email, string act, string validate, double timespan, string hash) { var ts = DateTime.Now.GetTotalMilliseconds(); if (ts - timespan > 86400000) { return(Content("链接已失效")); } var hash2 = (email + act + validate + timespan).AESEncrypt(AppConfig.BaiduAK); if (!hash2.Equals(hash)) { return(Content("操作失败,链接已被非法篡改")); } Broadcast entity = BroadcastService.GetFirstEntity(b => b.Email.Equals(email, StringComparison.InvariantCultureIgnoreCase) && b.ValidateCode.Equals(validate)); if (entity != null) { switch (act) { case "verify": entity.Status = Status.Subscribed; entity.ValidateCode = Guid.NewGuid().ToString(); entity.UpdateTime = DateTime.Now; BroadcastService.UpdateEntity(entity); BroadcastService.SaveChanges(); return(Content("订阅成功!")); case "cancel": entity.Status = Status.Canceled; entity.UpdateTime = DateTime.Now; BroadcastService.UpdateEntity(entity); BroadcastService.SaveChanges(); return(Content("取消订阅成功,您将不会再接收到文章更新,如果您以后需要再次接收更新推送,可以到主站点重新进行订阅操作!")); default: return(RedirectToAction("Index", "Home")); } } return(Content("该邮箱账户未使用邮件订阅!")); }