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;
}