/// <summary> /// Converts Input.MailMessage to Entities.MailMessage. /// If sender or receivers isn't exist then they will be added to repository /// If email forwarded then sender will be taken from body <see cref="MailMessageParserThunderbird"/> /// </summary> /// <param name="mailMessage">Input.MailMessage type of message</param> /// <returns>Entities.MailMessage type of message</returns> public Entities.MailMessage Convert(MailMessage mailMessage) { // If mail message is forwarded then Receiver will be person who forward mail and Sender taken from body if (isForwardedMailMessage(mailMessage)) { var parser = mailMessageParserFactory.GetMailMessageParser(mailMessage.UserAgent); mailMessage.Subject = parser.GetSubject(mailMessage.Subject); mailMessage.Receivers = new List <MailAddress> { mailMessage.Sender }; mailMessage.Sender = parser.GetSender(mailMessage); mailMessage.Body = parser.GetBody(mailMessage); } var returnMessage = new Entities.MailMessage { Body = mailMessage.Body, Date = mailMessage.Date, Subject = mailMessage.Subject, Receivers = new List <Person>() }; //find a Sender in Repository var sender = repository.Query <Person>().FirstOrDefault(x => x.Email == mailMessage.Sender.Address); returnMessage.Sender = sender ?? AddNewPersonToRepository(mailMessage.Sender, mailMessage.Date); //find Receivers in repository foreach (var receiver in mailMessage.Receivers) { var currentReceiver = repository.Query <Person>().FirstOrDefault(x => x.Email == receiver.Address); returnMessage.Receivers.Add(currentReceiver ?? AddNewPersonToRepository(receiver, mailMessage.Date)); } return(returnMessage); }
public void Initializer() { parserFactory.GetMailMessageParser(Arg.Any <String>()).ReturnsForAnyArgs(new MailMessageParserThunderbird()); mailMessagePersister = new MailMessagePersister(repository, aeEmailClient, new InquiryFactory(), parserFactory); }