示例#1
0
        /// <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);
        }
示例#2
0
 public void Initializer()
 {
     parserFactory.GetMailMessageParser(Arg.Any <String>()).ReturnsForAnyArgs(new MailMessageParserThunderbird());
     mailMessagePersister = new MailMessagePersister(repository, aeEmailClient, new InquiryFactory(), parserFactory);
 }