At standard operation email is being sent to EntityReference object corresponding to: User, Contact etc. Entity reference is being converted anyway into ActivityParty object.
So, why not to use ActivityParty just from email address collection:
private const string HtmlMimeType = @"Content-Type: text/html; charset=UTF-8"; private const string PlainTextMimeType = @"Content-Type: text/plain; charset=UTF-8"; public void CreateEmail(string title, string message, EntityReference[] senders, MailAddressCollection recipients, bool useHtmlFormat, bool sendAfterCreate) { var recipientsCollection = recipients.Select(recipientAddress => new ActivityParty { AddressUsed = recipientAddress.Address }).ToList(); CreateEmail(title, message, CreateActivityParties(senders), recipientsCollection, useHtmlFormat, sendAfterCreate); } private static IEnumerable<ActivityParty> CreateActivityParties(EntityReference[] entities) { var activityParty = new ActivityParty[entities.Length]; for (int index = 0; index < entities.Length; index++) activityParty[index] = CreateActivityParty(entities[index]); return activityParty; } private void CreateEmail(string title, string message, IEnumerable<ActivityParty> senders, IEnumerable<ActivityParty> recipients, bool useHtmlFormat, bool sendAfterCreate) { var email = new Email { Subject = title.IsNullOrEmpty() ? DefaultSubjectValue : title, Description = message, From = senders, To = recipients, MimeType = useHtmlFormat ? HtmlMimeType : PlainTextMimeType }; ValidateEmail(); OrganizationService.Create(email); Send(sendAfterCreate); } private void Send(bool send) { var tokenRequest = new GetTrackingTokenEmailRequest(); var tokenResponse = (GetTrackingTokenEmailResponse)OrganizationService.Execute(tokenRequest); var request = new SendEmailRequest { EmailId = _entityPrototype.InterposedEntity.Id, TrackingToken = tokenResponse.TrackingToken, IssueSend = send }; OrganizationService.Execute(request); }