public void Person_contact_from_supplier() { var message = Mime.Parse(@"..\..\Data\MailContextFixture\Unparse_Protek.eml"); var context = new MailContext(); var name = Generator.Name(); var email = name + "@test.ru"; var fromList = new AddressList(); fromList.Add(new MailboxAddress(email)); var supplier = TestSupplier.CreateNaked(session); supplier.Name = name; session.Save(supplier); var group = supplier.ContactGroupOwner.AddContactGroup(ContactGroupType.MiniMails); session.Save(group); group.AddPerson("Tестовая персона"); session.Save(group.Persons[0]); var contact = group.Persons[0].AddContact(ContactType.Email, email); session.Save(contact); FlushAndCommit(); context.ParseMime(message, fromList); Assert.AreEqual(context.Suppliers.Count, 1); Assert.AreEqual(context.Suppliers[0].Name, name); }
public void FromAddressParseProblem() { var message = Mime.Parse(@"..\..\Data\MailContextFixture\Unparse_Protek.eml"); var fromList = MimeEntityExtentions.GetAddressList(message); Assert.That(fromList.Count, Is.EqualTo(0), "Список разборанных адресов отправителя должен быть пустым"); var context = new MailContext(); var exception = Assert.Throws<FromParseException>(() => context.ParseMime(message, fromList)); Assert.That(exception.Message, Is.StringStarting("Не смогли разобрать список отправителей письма для сопоставления с поставщиками")); }
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; }