public IEnumerable<string> Get() { var returnMessages = new List<string>(); using (var pop3Client = new Pop3Client()) { var messages = GetNewMessages(pop3Client); var messageCount = messages.Count(); if (messageCount > 0) { IMessageRepository messageRepository = new MessageRepository(); IMessageRecepientRepository messageRecepientRepository = new MessageRecepientRepository(); IMessageAttachmentRepository messageAttachmentRepository = new MessageAttachmentRepository(); IPermissionRepository permissionRepository = new PermissionRepository(); IChurchRepository churchRepository = new ChurchRepository(); IPersonRepository personRepository = new PersonRepository(permissionRepository, churchRepository); var emailSender = new EmailSender(messageRepository, messageRecepientRepository, messageAttachmentRepository, personRepository); foreach (var m in messages) { var mm = m.Value.ToMailMessage(); var regex = new Regex(@"##([0-9]*)##"); var matches = regex.Matches(mm.Body); if (matches.Count > 0 && matches[0].Groups.Count > 1) { try { int messageId; if (int.TryParse(matches[0].Groups[1].Value, out messageId)) { var originalSender = messageRepository.GetSender(messageId); if (originalSender != null) { var originalReceiver = personRepository.FetchPersonIdsFromEmailAddress(mm.From.Address, originalSender.ChurchId); var fromPersonId = originalSender.PersonId; if (originalReceiver.Any()) { fromPersonId = originalReceiver.First(); } returnMessages.Add(string.Format("Forwarding email on to {0}", originalSender.Email)); emailSender.SendEmail(mm.Subject, mm.Body, Username, originalSender.Email, Username, Password, fromPersonId, originalSender.ChurchId, mm.Attachments); } if (!DeleteMessageByMessageId(pop3Client, m.Key)) { var exception = new Exception("Cannot delete message " + mm.Subject + " " + mm.From); emailSender.SendExceptionEmailAsync(exception); } //pop3Client.DeleteMessage(count + 1); } } catch (Exception errSending) { returnMessages.Add(errSending.Message); emailSender.SendExceptionEmailAsync(errSending); } } } } } return returnMessages; }
public string GetEmails() { var returnMessages = new List<string>(); using (var pop3Client = new Pop3Client()) { var messages = GetNewMessages(pop3Client); var messageCount = messages.Count(); if (messageCount > 0) { IMessageRepository messageRepository = new MessageRepository(); IMessageRecepientRepository messageRecepientRepository = new MessageRecepientRepository(); IMessageAttachmentRepository messageAttachmentRepository = new MessageAttachmentRepository(); IPermissionRepository permissionRepository = new PermissionRepository(); IChurchRepository churchRepository = new ChurchRepository(); IPersonRepository personRepository = new PersonRepository(permissionRepository, churchRepository); IEmailSender emailSender = new EmailSender(messageRepository, messageRecepientRepository, messageAttachmentRepository, personRepository); for (var count = 0; count < messageCount; count++) { var mm = messages[count].ToMailMessage(); var regex = new Regex(@"##([0-9]*)##"); var matches = regex.Matches(mm.Body); if (matches.Count > 0 && matches[0].Groups.Count > 1) { try { int messageId; if (int.TryParse(matches[0].Groups[1].Value, out messageId)) { var originalSender = messageRepository.GetSender(messageId); if (originalSender != null) { var originalReceiver = personRepository.FetchPersonIdsFromEmailAddress(mm.From.Address, originalSender.ChurchId); var fromPersonId = originalSender.PersonId; if (originalReceiver.Any()) { fromPersonId = originalReceiver.First(); } returnMessages.Add(string.Format("Forwarding reply from {0} for messageId {1} on to {2}", fromPersonId, messageId, originalSender.Email)); emailSender.SendEmail(mm.Subject, mm.Body, Username, originalSender.Email, Username, Password, fromPersonId, originalSender.ChurchId, mm.Attachments); } pop3Client.DeleteMessage(count + 1); } } catch (Exception errSending) { returnMessages.Add(errSending.Message); emailSender.SendExceptionEmailAsync(errSending); } } } } } if (!returnMessages.Any()) { return "No replies found"; } var returnMessage = returnMessages.Aggregate(string.Empty, (current, m) => current + (m + "<br/>")); _emailService.SendSystemEmail("Replies found", returnMessage); return returnMessage; }