public ActionResult Delete(int id) { using (var context = new CustomerContainer()) { var subscriber = context.Subscriber.First(s => s.Id == id); context.DeleteObject(subscriber); context.SaveChanges(); return RedirectToAction("Index"); } }
public ActionResult Edit(Subscriber model) { using (var context = new CustomerContainer()) { var subscriber = context.Subscriber.First(s => s.Id == model.Id); TryUpdateModel(subscriber, new[] {"Active","Email"}); context.SaveChanges(); return RedirectToAction("Index"); } }
public ActionResult Subscribe(SubscribeFormModel subscribeForm) { try { if (ModelState.IsValid) { using (var context = new CustomerContainer()) { var subscriber = context.Subscriber.FirstOrDefault(s => s.Email == subscribeForm.SubscribeEmail); if (subscriber != null) { subscribeForm.ErrorMessage = "Этот email уже есть в базе подписчиков"; return PartialView("SubscribeForm", subscribeForm); } subscriber = new Subscriber { Guid = Guid.NewGuid().ToString(), Email = subscribeForm.SubscribeEmail, Active = false, SentConfirmation = false }; context.AddToSubscriber(subscriber); //string subscribeEmailFrom = ConfigurationManager.AppSettings["subscribeEmailFrom"]; //var emailFrom = new MailAddress(subscribeEmailFrom, "Listelli"); //var subscriberEmail = new MailAddress(subscriber.Email); //var result = MailHelper.SendTemplate(emailFrom, new List<MailAddress> { subscriberEmail }, // "Подтверждение регистрации", "ConfirmSubscribe.htm", // null, true, subscriber.Guid); //if (!result.EmailSent) //{ // subscribeForm.ErrorMessage = "Ошибка: " + result.ErrorMessage; // return PartialView("SubscribeForm", subscribeForm); //} context.SaveChanges(); return PartialView("SubscribeSuccess"); } } } catch (Exception ex) { if (!String.IsNullOrEmpty(ex.Message)) subscribeForm.ErrorMessage = ex.Message; else if (!String.IsNullOrEmpty(ex.InnerException.Message)) subscribeForm.ErrorMessage = ex.InnerException.Message; } return PartialView("SubscribeForm", subscribeForm); }
public static void ProcessSendEmail() { while (true) { using (var context = new CustomerContainer()) { var emailStatus = context.SendEmailStatus.FirstOrDefault(s => s.Status == 0 && s.Attempt < 3); var mailSubscriber = context.Subscriber.FirstOrDefault(s => s.SentConfirmation == false && s.SentConfirmationAttempt < 3); if (emailStatus != null) { try { using (var siteContext = new SiteContainer()) { var article = siteContext.Article.Include("ArticleItems").FirstOrDefault(c => c.Id == emailStatus.ArticleId); if (article != null) { var subscriber = context.Subscriber.First(s => s.Id == emailStatus.SubscriberId); var lng = siteContext.Language.FirstOrDefault(p => p.Code == "ru"); if (lng != null) { article.CurrentLang = lng.Id; foreach (var item in article.ArticleItems) { item.CurrentLang = lng.Id; } } StringBuilder sb = new StringBuilder(); sb.Append(HttpUtility.HtmlDecode(article.Description).Replace("src=\"", "src=\"http://listelli.ua")); foreach (var item in article.ArticleItems.OrderBy(a => a.SortOrder)) { sb.Append("<div class=\"articleItem\">"); if (item.ContentType == 1) { sb.Append(HttpUtility.HtmlDecode(item.Text)); } else { sb.Append(SiteExtensions.Graphics2.GraphicsHelper.CachedImage(item.ImageSource, SiteSettings.GetThumbnail("articleImage"))); } sb.Append("</div>"); } string emailText = sb.ToString(); string subscribeEmailFrom = ConfigurationManager.AppSettings["subscribeEmailFrom"]; var emailFrom = new MailAddress(subscribeEmailFrom, "Listelli"); MailSendingResult result = MailHelper.SendTemplate(emailFrom, new List<MailAddress> { new MailAddress(subscriber.Email) }, article.Title, "Newsletter.htm", null, true, emailText); emailStatus.SendDate = DateTime.Now; emailStatus.Attempt++; if (result.EmailSent) { emailStatus.Status = 1; emailStatus.ErrorMessage = "ok"; } else { emailStatus.ErrorMessage = "error sending email: " + result.ErrorMessage; } context.SaveChanges(); } else { break; } } } catch { break; } //var test = new TestTable { Date = DateTime.Now }; //context.AddToTestTable(test); //context.SaveChanges(); } else if (mailSubscriber != null) { try { string subscribeEmailFrom = ConfigurationManager.AppSettings["subscribeEmailFrom"]; var emailFrom = new MailAddress(subscribeEmailFrom, "Listelli"); var subscriberEmail = new MailAddress(mailSubscriber.Email); var result = MailHelper.SendTemplate(emailFrom, new List<MailAddress> { subscriberEmail }, "Подтверждение регистрации", "ConfirmSubscribe.htm", null, true, mailSubscriber.Guid); if (result.EmailSent) { mailSubscriber.SentConfirmation = true; } } catch { } mailSubscriber.SentConfirmationAttempt++; context.SaveChanges(); } else { break; } } Thread.Sleep(2000); } }
public ActionResult ConfirmSubscribe(string id) { using (var context = new CustomerContainer()) { var subscriber = context.Subscriber.FirstOrDefault(s => s.Guid == id); if (subscriber == null) { ViewBag.Message = "Неверный код подтверждения рассылки"; } else { subscriber.Active = true; context.SaveChanges(); } return View(); } }
public ActionResult Create(Article model) { try { using (var context = new SiteContainer()) { var cache = new Article { Date = model.Date, Published = model.Published }; context.AddToArticle(cache); var lang = context.Language.FirstOrDefault(p => p.Id == model.CurrentLang); if (lang != null) { CreateOrChangeContentLang(context, model, cache, lang); } var article = context.Article.First(c => c.Id == cache.Id); article.CurrentLang = CurrentLang.Id; if (model.SendToSubscribers) { using (var customerContext = new CustomerContainer()) { var activeSubscribers = customerContext.Subscriber.Where(s => s.Active).ToList(); foreach (var subscriber in activeSubscribers) { var emailStatus = MailHelper.CreateSendEmailStatusInstance(article.Id, subscriber.Id); customerContext.AddToSendEmailStatus(emailStatus); } customerContext.SaveChanges(); var newThread = new Thread(new ThreadStart(Listelli.Controllers.HomeController.ProcessSendEmail)); newThread.Start(); HttpContext.Application["mailSender"] = newThread; //string articleText = HttpUtility.HtmlDecode(article.Description) // .Replace("src=\"", "src=\"http://listelli.ua"); //List<MailAddress> addresses = new List<MailAddress>(); //foreach (var item in customerContext.Subscriber.Where(s => s.Active)) // addresses.Add(new MailAddress(item.Email)); //string subscribeEmailFrom = ConfigurationManager.AppSettings["subscribeEmailFrom"]; //var emailFrom = new MailAddress(subscribeEmailFrom, "Listelli"); //MailHelper.SendTemplateByPortions(emailFrom, addresses, article.Title, "Newsletter.htm", null, true, // articleText); } } return RedirectToAction("Articles", "Home", new { area = "" }); } } catch { return View(); } }
public ActionResult Edit(Article model) { try { using (var context = new SiteContainer()) { var cache = context.Article.FirstOrDefault(p => p.Id == model.Id); if (cache != null) { TryUpdateModel(cache, new[] { "Date", "Published" }); var lang = context.Language.FirstOrDefault(p => p.Id == model.CurrentLang); if (lang != null) { CreateOrChangeContentLang(context, model, cache, lang); } } var article = context.Article.First(c => c.Id == cache.Id); article.CurrentLang = CurrentLang.Id; if (model.SendToSubscribers) { using (var customerContext = new CustomerContainer()) { var existedStatuses = customerContext.SendEmailStatus.Where(s => s.ArticleId == article.Id).ToList(); var activeSubscribers = customerContext.Subscriber.Where(s => s.Active).ToList(); foreach (var subscriber in activeSubscribers) { var existedStatus = existedStatuses.FirstOrDefault( s => s.SubscriberId == subscriber.Id && s.ArticleId == article.Id); if (existedStatus == null) { var emailStatus = MailHelper.CreateSendEmailStatusInstance(article.Id, subscriber.Id); customerContext.AddToSendEmailStatus(emailStatus); } } customerContext.SaveChanges(); var newThread = new Thread(new ThreadStart(Listelli.Controllers.HomeController.ProcessSendEmail)); newThread.Start(); HttpContext.Application["mailSender"] = newThread; } } return RedirectToAction("Articles", "Home", new { area = "" }); } } catch { return View(); } }