public override void CheckMime(Mime m) { _addressId = null; _currentDocumentType = null; // Получаем кол-во корректных адресов, т.е. отправленных // на @waybills.analit.net или на @refused.analit.net var emailList = m.GetRecipients() .Where(x => GetClientCode(x) != null) .Select(s => s.ToUpper()) .Distinct() .ToList(); var correctAddresCount = emailList.Count; // Все хорошо, если кол-во вложений больше 0 и распознан только один адрес как корректный // Если не сопоставили с клиентом) if (correctAddresCount == 0) { throw new EMailSourceHandlerException("Не найден клиент.", Settings.Default.ResponseDocSubjectTemplateOnNonExistentClient, Settings.Default.ResponseDocBodyTemplateOnNonExistentClient); } if (correctAddresCount == 1 && m.Attachments.Length == 0) { throw new EMailSourceHandlerException("Письмо не содержит вложений.", Settings.Default.ResponseDocSubjectTemplateOnNothingAttachs, Settings.Default.ResponseDocBodyTemplateOnNothingAttachs); } if (correctAddresCount > 1) { throw new EMailSourceHandlerException("Письмо отправленно нескольким клиентам.", Settings.Default.ResponseDocSubjectTemplateOnMultiDomen, Settings.Default.ResponseDocBodyTemplateOnMultiDomen); } if (m.Attachments.Length > 0) { var attachmentsIsBigger = m.Attachments.Any(attachment => (attachment.Data.Length / 1024.0) > Settings.Default.MaxWaybillAttachmentSize); if (attachmentsIsBigger) { throw new EMailSourceHandlerException(String.Format("Письмо содержит вложение размером больше максимально допустимого значения ({0} Кб).", Settings.Default.MaxWaybillAttachmentSize), Settings.Default.ResponseDocSubjectTemplateOnMaxWaybillAttachment, String.Format(Settings.Default.ResponseDocBodyTemplateOnMaxWaybillAttachment, Settings.Default.MaxWaybillAttachmentSize)); } } }
public void ParseRecipients(Mime mime) { ParseRecipientAddresses(mime.GetRecipients()); if (Recipients.Count > 0) { foreach (var recipient in Recipients) { if (recipient.Status == RecipientStatus.Verified) { var users = recipient.GetUsers(Suppliers[0].RegionMask); if (users.Count > 0) { for (int i = users.Count - 1; i > -1; i--) { var mails = ActiveRecordLinqBase <MailSendLog> .Queryable.Where( log => log.Mail.LogTime > DateTime.Now.AddDays(-1) && log.Mail.SHA256Hash == SHA256MailHash && log.User.Id == users[i].Id).ToList(); if (mails.Count > 0) { users.RemoveAt(i); } } if (users.Count > 0) { users.ForEach(u => AddUser(u, recipient)); } else { recipient.Status = RecipientStatus.Duplicate; } } else { recipient.Status = RecipientStatus.NotAvailable; } } } } }