public void Handle(EmailReceivedMessage emailMessage)
        {
            Data.EmailReceivedMessage = emailMessage;

            var requestersDtoToCreate = new List <RequesterDTO>();

            var fromAddress = new MailAddressLite {
                Address = emailMessage.Mail.FromAddress, DisplayName = emailMessage.Mail.FromDisplayName
            };

            ProcessAddress(fromAddress, requestersDtoToCreate);

            if (emailMessage.Mail.CC != null)
            {
                foreach (var ccAddress in emailMessage.Mail.CC)
                {
                    ProcessAddress(ccAddress, requestersDtoToCreate);
                }
            }

            if (requestersDtoToCreate.Empty())
            {
                var fromRequester = GetRequesterByAddress(fromAddress.Address);
                InvokeRules(fromRequester.Id);
            }
            else
            {
                SendLocal(new CreateRequestersForMessageCommandInternal {
                    RequestersDto = requestersDtoToCreate.ToArray(), OuterSagaId = Data.Id
                });
            }
        }
        private static RequesterDTO CreateRequesterDtoFromAddress(MailAddressLite address)
        {
            var requesterDto = new RequesterDTO {
                Email = address.Address, SourceType = RequesterSourceTypeEnum.Mail
            };

            if (string.IsNullOrEmpty(address.DisplayName))
            {
                return(requesterDto);
            }

            var name = address.DisplayName.Split(new[] { ' ' }, 2);

            switch (name.Length)
            {
            case 1:
                requesterDto.FirstName = string.IsNullOrEmpty(name[0]) ? address.Address : name[0];
                break;

            case 2:
                requesterDto.FirstName = name[0];
                requesterDto.LastName  = name[1];
                break;
            }

            return(requesterDto);
        }
        private void ProcessAddress(MailAddressLite address, List <RequesterDTO> requestersDtoToCreate)
        {
            var requester = GetRequesterByAddress(address.Address);

            if (requester != null)
            {
                RestoreDeletedRequester(requester);
            }
            else
            {
                var requesterDto = CreateRequesterDtoFromAddress(address);
                requestersDtoToCreate.Add(requesterDto);
            }
        }