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.Get(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; } 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(HostEnvironment.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, "订阅失败,这可能是服务器出现了一点问题,去留言板给站长反馈吧!")); } }
public ActionResult Save(Broadcast model) { model.UpdateTime = DateTime.Now; var entry = BroadcastService.Get(c => c.Email.Equals(model.Email)); bool b; if (entry is null) { b = BroadcastService.AddEntitySaved(model) != null; } else { entry.Email = model.Email; entry.SubscribeType = model.SubscribeType; entry.UpdateTime = DateTime.Now; b = BroadcastService.SaveChanges() > 0; } return(ResultData(model, b, b ? "更新订阅成功!" : "更新订阅失败!")); }
public ActionResult Cancel(string email) { Broadcast c = BroadcastService.Get(b => b.Email.Equals(email) && b.Status == Status.Subscribed); if (c != null) { var ts = DateTime.Now.GetTotalMilliseconds(); string url = Url.Action("Subscribe", "Subscribe", new { email, act = "cancel", validate = c.ValidateCode, timespan = ts, hash = (c.Email + "cancel" + c.ValidateCode + ts).AESEncrypt(AppConfig.BaiduAK) }, Request.Scheme); BackgroundJob.Enqueue(() => CommonHelper.SendMail("取消本站订阅", $"请<a href=\"{url}\">点击这里</a>取消订阅本站更新。", email)); return(Content("取消订阅的链接已经发送到了您的邮箱,请到您的邮箱内进行取消订阅")); } return(Content("您输入的邮箱没有订阅本站更新,或者已经取消订阅了")); }
/// <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.Get(b => b.Email.Equals(email, StringComparison.InvariantCultureIgnoreCase) && b.ValidateCode.Equals(validate)); if (entity == null) { return(Content("该邮箱账户未使用邮件订阅!")); } switch (act) { case "verify": entity.Status = Status.Subscribed; entity.ValidateCode = Guid.NewGuid().ToString(); entity.UpdateTime = DateTime.Now; BroadcastService.SaveChanges(); return(Content("订阅成功!")); case "cancel": entity.Status = Status.Canceled; entity.UpdateTime = DateTime.Now; BroadcastService.SaveChanges(); return(Content("取消订阅成功,您将不会再接收到文章更新,如果您以后需要再次接收更新推送,可以到主站点重新进行订阅操作!")); default: return(RedirectToAction("Index", "Home")); } }