/// <summary> /// Formats the specified message. /// </summary> /// <param name="message">The message.</param> /// <param name="formattedMessage">The formatted message.</param> /// <param name="inbox">The inbox.</param> /// <returns>Enumeration value indicating the result of the format.</returns> public MailMessageFormatterResult Format(MailMessage message, ReceivedEmailMessage formattedMessage, IEntity inbox) { if (message == null || formattedMessage == null || inbox == null) { return(MailMessageFormatterResult.Skip); } var iCalMessage = formattedMessage.As <ReceivedICalEmailMessage>( ); if (iCalMessage == null) { EventLog.Application.WriteError("The ReceivedEmailMessage was not of type 'ReceivedICalEmailMessage'"); return(MailMessageFormatterResult.Error); } string iCalString; MailMessageFormatterResult result = GetICalUpdate(message, iCalMessage, out iCalString); if (result == MailMessageFormatterResult.Ok) { iCalMessage.ICalUpdate = iCalString; } return(result); }
/// <summary> /// Processes and saves the email messages for the Inbox /// </summary> /// <param name="inbox">The inbox that the messages are to be loaded for</param> /// <param name="emailMessages">List of email messages who's To address matches the Inboxes email address</param> void ProcessEmailsForInbox(Inbox inbox, IReadOnlyCollection <MailMessage> emailMessages) { EventLog.Application.WriteTrace("Processing {0} emails for inbox '{1}'", emailMessages.Count, inbox.Name); var formatters = GetEmailMessageFormatters(inbox); var messages = new List <ReceivedEmailMessage>(); foreach (MailMessage message in emailMessages) { var receivedMessage = CreateReceivedEmailMessage(message, inbox.InboxReceivedMessageType); bool process = true; foreach (IMailMessageFormatter <ReceivedEmailMessage> formatter in formatters) { MailMessageFormatterResult mailMessageFormatterResult = formatter.Format(message, receivedMessage, inbox); if (mailMessageFormatterResult == MailMessageFormatterResult.Reject || mailMessageFormatterResult == MailMessageFormatterResult.Error) { receivedMessage.Dispose(); process = false; break; } } if (process) { messages.Add(receivedMessage); } } if (messages.Count <= 0) { return; } if (messages.Count > 0) { SaveWithActions(inbox, messages); StartWorkflows(inbox, messages); } }