Esempio n. 1
0
        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);

        }
Esempio n. 2
0
 public ActionResult Edit(int id)
 {
     using (var context = new CustomerContainer())
     {
         var subscriber = context.Subscriber.First(s => s.Id == id);
         return View(subscriber);
     }
 }
Esempio n. 3
0
 public ActionResult EmailSendingStatuses()
 {
     using (var context = new CustomerContainer())
     {
         var statuses = context.SendEmailStatus.ToList();
         return View(statuses);
     }
 }
Esempio n. 4
0
 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");
     }
 }
Esempio n. 5
0
 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");
     }
 }
Esempio n. 6
0
        //
        // GET: /Admin/Subscriber/

        public ActionResult Index()
        {
            using (var context = new CustomerContainer())
            {
                var subscribers = context.Subscriber.ToList();
                Thread emailSending = (Thread)HttpContext.Application["mailSender"];
                ViewBag.EmailSendingStatus = emailSending != null ? emailSending.ThreadState.ToString() : "null";
                return View(subscribers);
            }
        }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
        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();
            }
        }
Esempio n. 9
0
        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();
            }
        }
Esempio n. 10
0
        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();
            }
        }