public override void CheckMime(Mime m) { _context = null; var context = new MailContext(); Ping(); context.ParseMime(m, MimeEntityExtentions.GetAddressList(m)); Ping(); if (String.IsNullOrEmpty(context.SHA256MailHash)) { throw new MiniMailOnEmptyLetterException("У письма не установлены тема и тело письма."); } if (context.Suppliers.Count > 1) { throw new EMailSourceHandlerException("Найдено несколько источников."); } if (context.Suppliers.Count == 0) { throw new MiniMailOnUnknownProviderException( "Для данного E-mail не найден контакт в группе 'Список E-mail, с которых разрешена отправка писем клиентам АналитФармация'", context.SupplierEmails); } using (new SessionScope()) { context.ParseRecipients(m); } Ping(); // Все хорошо, если кол-во вложений больше 0 и распознан только один адрес как корректный // Если не сопоставили с клиентом) if (context.Users.Count == 0) { if (context.Recipients.All(r => r.Status == RecipientStatus.Duplicate)) { throw new EmailDoubleMessageException("Письмо было отброшено как дубликат. " + context.SupplierEmails + " " + context.Subject); } else { throw new MiniMailOnEmptyRecipientsException( "Не найден пользователь.", context.GetCauseList()); } } else if (context.DiscardedRecipients.Count > 0) { SendErrorLetterToSupplier( new MiniMailOnEmptyRecipientsException( "Не найден пользователь.", context.GetCauseList()), m); } if (m.MailSize() / 1024.0 / 1024.0 > Settings.Default.MaxMiniMailSize) { throw new MiniMailOnMaxMailSizeException( "Размер письма больше максимально допустимого значения ({0} Мб).".Format(Settings.Default.MaxMiniMailSize)); } if (m.Attachments.Length > 0) { var nonAllowedExtension = false; var errorExtension = String.Empty; foreach (var attachment in m.GetValidAttachements()) { var fileName = attachment.GetFilename(); var extension = Path.GetExtension(fileName); if (!context.IsValidExtension(extension)) { nonAllowedExtension = true; errorExtension = extension; break; } } if (nonAllowedExtension) { throw new MiniMailOnAllowedExtensionsException( "Письмо содержит вложение недопустимого типа.", errorExtension, TemplateHolder.Values.AllowedMiniMailExtensions); } } _context = context; }