private static Participant Simplify(IUserMailbox participant) { return(new Participant() { Name = participant.Owner.GetShortName(), Email = participant.EmailLogin, User = participant.Owner.Id }); }
private static void FillParticipants(IUserMailbox userMailbox, IMessagePart emailMessage, IEmailMessage message) { var participants = EmailMessageParticipants(userMailbox, emailMessage, message); var toParticipants = participants .Where(c => emailMessage.To.Any(e => e.Email == c.EmailString)).ToList(); message.To.AddAll(toParticipants); var fromParticipants = participants .Where(c => emailMessage.From.Any(e => e.Email == c.EmailString)).ToList(); message.From.AddAll(fromParticipants); }
private static List <IEmailMessageParticipant> EmailMessageParticipants(IUserMailbox userMailbox, IMessagePart emailMessage, IEmailMessage message) { var contactSummaries = emailMessage.From.ToList(); contactSummaries.AddRange(emailMessage.To); var emailList = contactSummaries.Select(c => c.Email).ToList(); var emailMessageParticipantManager = EmailMessageParticipantManager.Instance; var participants = emailMessageParticipantManager.GetParticipants(emailList).ToList(); var notExistingParticipants = contactSummaries .Where(c => participants.All(e => e.EmailString != c.Email)).ToList(); if (notExistingParticipants.Any()) { var securityService = Locator.GetServiceNotNull <ISecurityService>(); securityService.RunByUser(userMailbox.Owner, () => { var newParticipants = emailMessageParticipantManager.CreateParticipants(notExistingParticipants); participants.AddRange(newParticipants); }); } var existContactParticipants = participants .Where(c => c.TypeUid == InterfaceActivator.UID <IEmailMessageParticipantContact>()) .Select(c => c.CastAsRealType() is IEmailMessageParticipantContact participantContact ? participantContact : null) .Where(c => c != null).ToList(); var contacts = existContactParticipants.Select(c => c.Contact) .Where(c => c != null).ToList(); var contractors = contacts.Select(c => c.Contractor) .Where(c => c != null).ToList(); message.Contacts.AddAll(contacts); message.Contractors.AddAll(contractors); return(participants); }