コード例 #1
0
        /// <summary>
        /// Начала сессии пользователя
        /// </summary>
        protected void Session_Start()
        {
            using (var httpRequestScope = Locator.BeginNestedHttpRequestScope())
            {
                // Контекст
                var context = HttpContext.Current;

                // Ищем авторизационную куку
                var authCookie = context.Request.Cookies["auth"];
                if (authCookie != null)
                {
                    var identity = authCookie["identity"];
                    var pass     = authCookie["pass"];

                    var dc   = Locator.GetService <LCDataContext>();
                    var user = dc.Users.FirstOrDefault(u => u.Email.ToLower() == identity.ToLower() && u.PasswordHash.ToLower() == pass.ToLower());
                    if (user != null)
                    {
                        context.Session["CurrentUser"] = user.Id;
                        user.LastLogin = DateTime.Now;
                        dc.SubmitChanges();
                    }
                    else
                    {
                        context.Response.Cookies.Remove("auth");
                    }
                }
            }
        }
コード例 #2
0
 public void Notify(string mailto, string title, string content)
 {
     using (var httpRequestScope = Locator.BeginNestedHttpRequestScope())
     {
         // Создаем сообщение и помещаем его в очередь
         var dc         = Locator.GetService <LCDataContext>();
         var newMessage = new MailNotificationMessage()
         {
             Recipient  = mailto,
             Subject    = title,
             Content    = content,
             DateEnqued = DateTime.Now,
             Sended     = false
         };
         dc.MailNotificationMessages.InsertOnSubmit(newMessage);
         dc.SubmitChanges();
     }
 }
コード例 #3
0
 /// <summary>
 /// Нотифицирует указанный номер телефона указанным сообщением смс
 /// </summary>
 /// <param name="phoneNumber">Номер телефона</param>
 /// <param name="message">Сообщение</param>
 public void Notify(string phoneNumber, string message)
 {
     if (String.IsNullOrEmpty(phoneNumber))
     {
         return;
     }
     using (var httpRequestScope = Locator.BeginNestedHttpRequestScope())
     {
         // Создаем сообщение и помещаем его в очередь
         var dc         = Locator.GetService <LCDataContext>();
         var newMessage = new SMSNotificationMessage()
         {
             Recipient    = phoneNumber,
             Message      = message,
             DateEnqueued = DateTime.Now,
             Sended       = false
         };
         dc.SMSNotificationMessages.InsertOnSubmit(newMessage);
         dc.SubmitChanges();
     }
 }
コード例 #4
0
        /// <summary>
        /// Обрабатывает очередь сообщений
        /// </summary>
        private void FlushQueue()
        {
            var notifications = Convert.ToBoolean(ConfigurationManager.AppSettings["Notifications"]);

            if (!notifications)
            {
                return;
            }
            using (var httpRequestScope = Locator.BeginNestedHttpRequestScope())
            {
                // Репозиторий
                var dc       = Locator.GetService <LCDataContext>();
                var messages = dc.SMSNotificationMessages.Where(m => m.Sended == false).ToList();

                // Выходим если в очереди пусто
                if (messages.Count == 0)
                {
                    return;
                }



                // Обрабатываем очередь
                Logger.Info(string.Format("Обрабатываем очередь сообщений, в очереди {0} писем", messages.Count));

                // Корневой объект отправки
                var rootObject = new JObject(new JProperty("apikey", new JValue(System.Configuration.ConfigurationManager.AppSettings["SMSAPIKey"])));

                // Массив, содержащий отправляемые сообщения
                var sendArray = new JArray();

                // Формируем запрос на отправку
                foreach (var msg in messages)
                {
                    var number     = StringUtils.NormalizePhoneNumber(msg.Recipient);
                    var sendObject = new JObject(
                        new JProperty("id", new JValue(msg.Id)),
                        new JProperty("from", new JValue("Fulgur.ru")),
                        new JProperty("to", new JValue(number)),
                        new JProperty("text", new JValue(msg.Message)));

                    sendArray.Add(sendObject);
                }
                rootObject.Add(new JProperty("send", sendArray));

                // Отправляем
                HttpWebResponse response = null;
                try
                {
                    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(String.Format("http://smspilot.ru/api2.php?json={0}", HttpUtility.UrlEncode(rootObject.ToString())));
                    response = (HttpWebResponse)webRequest.GetResponse();
                }
                catch (Exception e)
                {
                    Logger.Error(string.Format("Ошибка в ходе обработки очереди СМС: {0}", e.Message));
                    throw;
                }

                // Обрабатываем результат
                bool sendSuccess    = false;
                var  responseStream = response.GetResponseStream();
                if (responseStream != null)
                {
                    // Анализируем ответ
                    var json = new StreamReader(responseStream).ReadToEnd();
                    if (json.Contains("\"send\""))
                    {
                        sendSuccess = true;
                    }
                }

                // Помечаем письма как отправленные
                if (sendSuccess)
                {
                    foreach (var msg in messages)
                    {
                        msg.Sended     = true;
                        msg.DateSended = DateTime.Now;
                    }
                    dc.SubmitChanges();
                }
                Logger.Info(string.Format("Обработка очереди смс сообщений завершена."));
            }
        }
コード例 #5
0
        /// <summary>
        /// Обрабатывает очередь сообщений
        /// </summary>
        private void FlushQueue()
        {
            using (var httpRequestScope = Locator.BeginNestedHttpRequestScope())
            {
                // Репозиторий
                var dc              = Locator.GetService <LCDataContext>();
                var messages        = dc.MailNotificationMessages.Where(m => m.Sended == false).ToList();
                var uniSenderApiKey = System.Configuration.ConfigurationManager.AppSettings["UniSenderApiKey"];

                // Выходим если в очереди пусто
                if (messages.Count == 0)
                {
                    return;
                }

                // Получаем данные для отправки
                var connectionData = new MailConnectionString(System.Configuration.ConfigurationManager.AppSettings["MailConnectionString"]);

                // Обрабатываем очередь
                Logger.Info(string.Format("Обрабатываем очередь сообщений, в очереди {0} писем", messages.Count));
                var sendedCount = 0;
                foreach (var msg in messages)
                {
                    var client        = new WebClient();
                    var request       = "http://api.unisender.com/ru/api/sendEmail?format=json";
                    var requestParams = new NameValueCollection();
                    requestParams.Add("api_key", uniSenderApiKey);
                    requestParams.Add("email", msg.Recipient);
                    requestParams.Add("sender_name", "Trust-Media Lead Control CRM System");
                    requestParams.Add("sender_email", "*****@*****.**");
                    requestParams.Add("subject", msg.Subject);
                    requestParams.Add("body", msg.Content);
                    requestParams.Add("list_id", "2619464");
                    requestParams.Add("lang", "ru");


                    // Пытаемся отправить
                    try
                    {
                        var response = Encoding.UTF8.GetString(client.UploadValues(request, requestParams));
                        if (response.Contains("\"email_id\""))
                        {
                            sendedCount++;
                        }
                        else
                        {
                            throw new Exception("Не удалось отправить сообщение т.к. UniSender не вернул его id");
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.Error(string.Format("Не удалось отправить письмо получателю {0} по причине: {1}", msg.Recipient, e.Message));
                        continue;
                    }

                    // Помечаем письмо как отправленное
                    msg.Sended     = true;
                    msg.DateSended = DateTime.Now;
                    dc.SubmitChanges();
                }

                Logger.Info(string.Format("Обработка очереди сообщений завершена. Отправлено {0} писем из {1}", sendedCount, messages.Count));
            }
        }
コード例 #6
0
        /// <summary>
        /// Обрабатывает очередь сообщений
        /// </summary>
        private void FlushQueue()
        {
            var notifications = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["Notifications"]);

            if (!notifications)
            {
                return;
            }
            using (var httpRequestScope = Locator.BeginNestedHttpRequestScope())
            {
                // Репозиторий
                var dc       = Locator.GetService <LCDataContext>();
                var messages = dc.MailNotificationMessages.Where(m => m.Sended == false).ToList();

                // Выходим если в очереди пусто
                if (messages.Count == 0)
                {
                    return;
                }

                // Получаем данные для отправки
                var connectionData = new MailConnectionString(System.Configuration.ConfigurationManager.AppSettings["MailConnectionString"]);

                // Подгатавливаем клиент
                var mailClient = new SmtpClient(connectionData.Host, connectionData.Port)
                {
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    Credentials    = new NetworkCredential(connectionData.Login, connectionData.Password),
                    EnableSsl      = connectionData.UseSsl
                };

                // Обрабатываем очередь
                Logger.Info(string.Format("Обрабатываем очередь сообщений, в очереди {0} писем", messages.Count));
                var sendedCount = 0;
                foreach (var msg in messages)
                {
                    // Формируем письмо
                    var mailMessage = new MailMessage(new MailAddress(connectionData.FromAddress, connectionData.FromName),
                                                      new MailAddress(msg.Recipient))
                    {
                        Subject         = msg.Subject,
                        SubjectEncoding = Encoding.UTF8,
                        Body            = msg.Content,
                        BodyEncoding    = Encoding.UTF8,
                        IsBodyHtml      = true
                    };

                    // Пытаемся отправить
                    try
                    {
                        mailClient.Send(mailMessage);
                        sendedCount++;
                    }
                    catch (Exception e)
                    {
                        Logger.Error(string.Format("Не удалось отправить письмо получателю {0} по причине: {1}", msg.Recipient, e.Message));
                        continue;
                    }

                    // Помечаем письмо как отправленное
                    msg.Sended     = true;
                    msg.DateSended = DateTime.Now;
                    dc.SubmitChanges();
                }

                Logger.Info(string.Format("Обработка очереди сообщений завершена. Отправлено {0} писем из {1}", sendedCount, messages.Count));
            }
        }