protected override void ErrorOnMessageProcessing(Mime m, AddressList from, EMailSourceHandlerException e) { try { //отправляем письмо поставщику if (e is MiniMailException) { SendErrorLetterToSupplier(e, m); } else if (e is EmailDoubleMessageException) { //обрабатываем случай сообщений-дубликатов - логирование как Warning _logger.WarnFormat("Произошла отправка дубликата письма: {0}", e); } else if (e is FromParseException) { //обрабатываем случай с проблемой разбора списка отправителя - логирование как Warning _logger.Warn("Не разобран список отправителей письма", e); } else { //отправляем письмо в tech для разбора SendUnrecLetter(m, from, e); } } catch (Exception exMatch) { _logger.Error("Не удалось отправить нераспознанное письмо", exMatch); } }
protected override void SendUnrecLetter(Mime m, AddressList fromList, EMailSourceHandlerException e) { try { var attachments = m.Attachments.Where(a => !String.IsNullOrEmpty(a.GetFilename())).Aggregate("", (s, a) => s + String.Format("\"{0}\"\r\n", a.GetFilename())); var ms = new MemoryStream(m.ToByteData()); FailMailSend(m.MainEntity.Subject, fromList.ToAddressListString(), m.MainEntity.To.ToAddressListString(), m.MainEntity.Date, ms, attachments, e.Message); DocumentReceiveLog.Log(GetFirmCodeByFromList(fromList), _addressId, null, _currentDocumentType.DocType, String.Format(@"{0} Тема : {1} Отправители : {2} Получатели : {3} Список вложений : {4} ", e.Message, m.MainEntity.Subject, fromList.ToAddressListString(), m.MainEntity.To.ToAddressListString(), attachments), IMAPHandler.CurrentUID); } catch (Exception exMatch) { _logger.Error("Не удалось отправить нераспознанное письмо", exMatch); } }
protected override void SendUnrecLetter(Mime m, AddressList fromList, EMailSourceHandlerException e) { try { var attachments = m.Attachments.Where(a => !String.IsNullOrEmpty(a.GetFilename())).Aggregate("", (s, a) => s + String.Format("\"{0}\"\r\n", a.GetFilename())); var ms = new MemoryStream(m.ToByteData()); FailMailSend(m.MainEntity.Subject, fromList.ToAddressListString(), m.MainEntity.To.ToAddressListString(), m.MainEntity.Date, ms, attachments, e.Message); } catch (Exception exMatch) { _logger.Error("Не удалось отправить нераспознанное письмо", exMatch); } }
public void SendErrorLetterToSupplier(EMailSourceHandlerException e, Mime sourceLetter) { try { var miniMailException = e as MiniMailException; if (miniMailException != null) { e.MailTemplate = TemplateHolder.GetTemplate(miniMailException.Template); } if (e.MailTemplate.IsValid()) { var FromList = MimeEntityExtentions.GetAddressList(sourceLetter); var from = new AddressList(); @from.Parse("*****@*****.**"); var responseMime = new Mime(); responseMime.MainEntity.From = @from; #if DEBUG var toList = new AddressList { new MailboxAddress(Settings.Default.SMTPUserFail) }; responseMime.MainEntity.To = toList; #else responseMime.MainEntity.To = FromList; #endif responseMime.MainEntity.Subject = e.MailTemplate.Subject; responseMime.MainEntity.ContentType = MediaType_enum.Multipart_mixed; var testEntity = responseMime.MainEntity.ChildEntities.Add(); testEntity.ContentType = MediaType_enum.Text_plain; testEntity.ContentTransferEncoding = ContentTransferEncoding_enum.QuotedPrintable; testEntity.DataText = e.GetBody(sourceLetter); var attachEntity = responseMime.MainEntity.ChildEntities.Add(); attachEntity.ContentType = MediaType_enum.Application_octet_stream; attachEntity.ContentTransferEncoding = ContentTransferEncoding_enum.Base64; attachEntity.ContentDisposition = ContentDisposition_enum.Attachment; attachEntity.ContentDisposition_FileName = (!String.IsNullOrEmpty(sourceLetter.MainEntity.Subject)) ? sourceLetter.MainEntity.Subject + ".eml" : "Unrec.eml"; attachEntity.Data = sourceLetter.ToByteData(); Send(responseMime); } else { _logger.ErrorFormat("Для исключения '{0}' не установлен шаблон", e.GetType()); } } catch (Exception exception) { _logger.WarnFormat("Ошибка при отправке письма поставщику: {0}", exception); } }
protected override void ErrorOnMessageProcessing(Mime m, AddressList from, EMailSourceHandlerException e) { try { var subject = e.MailTemplate.Subject; var body = e.MailTemplate.Body; var message = e.Message; if (String.IsNullOrEmpty(body)) { SendUnrecLetter(m, from, e); return; } var attachments = m.Attachments.Where(a => !String.IsNullOrEmpty(a.GetFilename())).Aggregate("", (s, a) => s + String.Format("\"{0}\"\r\n", a.GetFilename())); SendErrorLetterToSupplier(e, m); if (e is EmailFromUnregistredMail) { var mail1 = new RejectedEmail { Comment = message, LogTime = DateTime.Now, From = @from.Mailboxes.First().EmailAddress, Subject = subject }; using (var session = ActiveRecordMediator.GetSessionFactoryHolder().GetSessionFactory(typeof(ActiveRecordBase)).OpenSession()) using (var transaction = session.BeginTransaction()) { session.Save(mail1); transaction.Commit(); } } var comment = $@"{message} Отправители : {@from.ToAddressListString()} Получатели : {m.MainEntity.To.ToAddressListString()} Список вложений : {attachments} Тема письма поставщику : {subject} Тело письма поставщику : {body}"; _logger.Warn($"Не удалось разобрать письмо с адреса {@from.ToAddressListString()}", e); if (_currentDocumentType != null) { DocumentReceiveLog.Log(GetFirmCodeByFromList(@from), _addressId, null, _currentDocumentType.DocType, comment, IMAPHandler.CurrentUID); } } catch (Exception exMatch) { _logger.Error("Не удалось отправить нераспознанное письмо", exMatch); } }
protected virtual void SendUnrecLetter(Mime m, AddressList from, EMailSourceHandlerException exception) { try { var attachments = m.Attachments.Where(a => !String.IsNullOrEmpty(a.GetFilename())).Aggregate("", (s, a) => s + String.Format("\"{0}\"\r\n", a.GetFilename())); var ms = new MemoryStream(m.ToByteData()); #if !DEBUG SmtpClientEx.QuickSendSmartHost( Settings.Default.SMTPHost, 25, Environment.MachineName, Settings.Default.ServiceMail, new[] { Settings.Default.UnrecLetterMail }, ms); #endif FailMailSend(m.MainEntity.Subject, from.ToAddressListString(), m.MainEntity.To.ToAddressListString(), m.MainEntity.Date, ms, attachments, exception.Message); DownloadLogEntity.Log((ulong)PriceSourceType.EMail, String.Format("Письмо не распознано.Причина : {0}; Тема :{1}; От : {2}", exception.Message, m.MainEntity.Subject, from.ToAddressListString())); } catch (Exception exMatch) { _logger.Error("Не удалось отправить нераспознанное письмо", exMatch); } }
protected virtual void ErrorOnMessageProcessing(Mime m, AddressList from, EMailSourceHandlerException exception) { SendUnrecLetter(m, from, exception); }