/// <summary> /// Обрабатывает очередь сообщений /// </summary> private void FlushQueue() { using (var httpRequestScope = Locator.BeginNestedHttpRequestScope()) { // Репозиторий var repository = Locator.GetService<IMailNotificationMessagesRepository>(); var messages = repository.GetEnqueuedMessages().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", "PartDesk"); 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; repository.SubmitChanges(); } Logger.Info(string.Format("Обработка очереди сообщений завершена. Отправлено {0} писем из {1}", sendedCount, messages.Count)); } }
/// <summary> /// Обрабатывает очередь сообщений /// </summary> private void FlushQueue() { var notifications = Convert.ToBoolean(ConfigurationManager.AppSettings["Notifications"]); if (!notifications) { return; } using (var httpRequestScope = Locator.BeginNestedHttpRequestScope()) { // Репозиторий var repository = Locator.GetService<IMailNotificationMessagesRepository>(); var messages = repository.GetEnqueuedMessages().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; repository.SubmitChanges(); } Logger.Info(string.Format("Обработка очереди сообщений завершена. Отправлено {0} писем из {1}", sendedCount, messages.Count)); } }