public void ProcesingNewIncomeClientEmail(ImapX.Message[] emailMessages, List<Client> clients) { bool IsClientButNotAnswerFlag; using (SMSContext context = new SMSContext()) { List<ImapX.Message> localUids = new List<ImapX.Message>(); foreach (ImapX.Message message in emailMessages) { IsClientButNotAnswerFlag = false; if (message != null && message.From != null && !String.IsNullOrEmpty(message.From.Address)) { Client client = clients.FirstOrDefault(x => x.Email.ToLower().Equals(message.From.Address.ToLower())); if (client != null && ClientIsNotBlocked(client)) { string SecretKey = message.Subject.Substring(message.Subject.IndexOf('№') + 1).Replace(" ", "").Replace("\u2192", ""); if (!String.IsNullOrEmpty(SecretKey) && message.Body != null) { IncomeSMS incomeSMS = GetIncomeSMS(SecretKey, client.ClientId, context); if (incomeSMS != null) { string text; string messageText = null; try { messageText = message.Body.Text; } catch { messageText = emailBox.GetTrubleMessageText(message.From.Address, message.Subject, (DateTime)message.Date); } if (messageText != null) { if (messageText.Contains("\r\n)\r\nIMAPX")) text = messageText.Substring(0, messageText.IndexOf("\r\n)\r\nIMAPX")); else text = messageText; if (text.Contains("\r\n")) text = text.Substring(0, text.IndexOf("\r\n")); IncomeClientEmail incomeClientEmail = new IncomeClientEmail() { ClientId = client.ClientId, DateTime = DateTime.Now, MessageId = incomeSMS.MessageId, IsSent = false, SenderEmail = client.Email, SecretKey = SecretKey, RecipientEmail = emailBox.Email, Text = text }; incomeClientEmail = SaveIncomeClientEmail(incomeClientEmail, context); AddAnswer(incomeSMS.MessageId, incomeClientEmail.IncomeClientEmailId, Answer.AnswerSource.Email); if (incomeSMS.MessageType == IncomeSMS.Type.Email) emailBox.SendEmail(text, "Re:" + incomeSMS.ShortKey, incomeSMS.SenderAddress, SendIncomeClientEmailAnswerSetResult, incomeClientEmail); else { incomeClientEmail.IsSent = gsmModemList[incomeSMS.RecipientNumber].SendSMS(incomeSMS.SenderNumber, text); SaveIncomeClientEmail(incomeClientEmail, context); } localUids.Add(message); } } else { IsClientButNotAnswerFlag = true; } } } if (client == null || IsClientButNotAnswerFlag) { string ShortKey = message.Subject.Replace(" ", ""); client = GetClientByShortKey(ShortKey, context); if (client != null && ClientIsNotBlocked(client)) { ServicePhone servicePhone = GetPhoneByClient(client, context); if (servicePhone != null) { string text; string messageText = null; try { messageText = message.Body.Text; } catch { messageText = emailBox.GetTrubleMessageText(message.From.Address, message.Subject, (DateTime)message.Date); } if (messageText != null) { if (messageText.Contains("\r\n)\r\nIMAPX")) text = messageText.Substring(0, messageText.IndexOf("\r\n)\r\nIMAPX")); else text = messageText; if (text.Contains("\r\n")) text = text.Substring(0, text.IndexOf("\r\n")); IncomeSMS incomeSMS = new IncomeSMS() { SenderAddress = message.From.Address.ToLower().Replace(" ", ""), RecipientNumber = servicePhone.PhoneNumber, Client = client, Text = text, DateTime = DateTime.Now, SecretKey = GetSecretKey(client), Status = IncomeSMS.IncomeSMSStatus.Checked, Category = "new", IsReaded = false, IsAnswered = false, SMSIsSend = false, ShortKey = ShortKey, MessageType = IncomeSMS.Type.Email }; SaveIncomeSms(incomeSMS, context); localUids.Add(message); } } } } } } if (localUids.Count > 0) emailBox.SetSeen(localUids); } }
private IncomeClientEmail SaveIncomeClientEmail(IncomeClientEmail incomeClientEmail, SMSContext context) { try { if (incomeClientEmail.IncomeClientEmailId == 0) context.IncomeClientEmail.Add(incomeClientEmail); else context.Entry(incomeClientEmail).State = System.Data.Entity.EntityState.Modified; context.SaveChanges(); return incomeClientEmail; } catch (Exception e) { logger.Error("Ошибка записи в базу данных. Не удалось добавить письмо клиента с ответом.\r\nТекст ошибки:", e); return null; } }