示例#1
0
 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);
            }
        }
示例#3
0
 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);
 }