/// <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"); } } } }
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(); } }
/// <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(); } }
/// <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("Обработка очереди смс сообщений завершена.")); } }
/// <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)); } }
/// <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)); } }