//Derermines if current user is in one of the selected users (or is in a selected role)
        protected bool IsInSelectedList(Field recipientsField)
        {
            AccountSelectorField accountSelectorField = new AccountSelectorField(recipientsField);

            List <Account> selectedRoles = accountSelectorField.GetSelectedAccountsByType(AccountType.Role);
            List <Account> selectedUsers = accountSelectorField.GetSelectedAccountsByType(AccountType.User);

            if ((selectedUsers.Count + selectedRoles.Count) == 0)
            {
                return(false);
            }

            User currentUser = Context.User;

            if (
                selectedUsers.Any(
                    user => string.Equals(user.Name, currentUser.Name, StringComparison.InvariantCultureIgnoreCase)))
            {
                return(true);
            }

            if (selectedRoles.Any(role => currentUser.IsInRole(role.Name)))
            {
                return(true);
            }

            return(false);
        }
        //Returns unique email addresses of users that correspond to the selected list of users/roles
        private List <string> GetEmailsForUsersAndRoles(Field field)
        {
            List <string> emails = new List <string>();

            AccountSelectorField accountSelectorField = new AccountSelectorField(field);
            List <Account>       selectedRoles        = accountSelectorField.GetSelectedAccountsByType(AccountType.Role);
            List <Account>       selectedUsers        = accountSelectorField.GetSelectedAccountsByType(AccountType.User);
            //The shell site has Sitecore Domain
            var allUsers = Sitecore.Context.Domain.GetUsers();

            //var allUsers = Sitecore.SecurityModel.DomainManager.GetDomain("Sitecore").GetUsers();
            foreach (var user in allUsers)
            {
                string userEmail = user.Profile.Email;
                if (string.IsNullOrEmpty(userEmail))
                {
                    continue;
                }
                //if current user is in selected role add his email and check next user
                if (selectedRoles.Any(role => user.IsInRole(role.Name)))
                {
                    if (!emails.Contains(userEmail))
                    {
                        emails.Add(userEmail);
                    }
                    continue;
                }
                //if current user is one of the selected one add his email
                if (selectedUsers.Any(u => string.Equals(u.Name, user.Name, StringComparison.InvariantCultureIgnoreCase)))
                {
                    if (!emails.Contains(userEmail))
                    {
                        emails.Add(userEmail);
                    }
                }
            }

            return(emails);
        }
        //Returns unique email addresses of users that correspond to the selected list of users/roles
        private List<string> GetEmailsForUsersAndRoles(Field field)
        {
            List<string> emails = new List<string>();

            AccountSelectorField accountSelectorField = new AccountSelectorField(field);
            List<Account> selectedRoles = accountSelectorField.GetSelectedAccountsByType(AccountType.Role);
            List<Account> selectedUsers = accountSelectorField.GetSelectedAccountsByType(AccountType.User);
            //The shell site has Sitecore Domain
            var allUsers = Sitecore.Context.Domain.GetUsers();
            //var allUsers = Sitecore.SecurityModel.DomainManager.GetDomain("Sitecore").GetUsers();
            foreach (var user in allUsers)
            {
                string userEmail = user.Profile.Email;
                if (string.IsNullOrEmpty(userEmail)) continue;
                //if current user is in selected role add his email and check next user
                if (selectedRoles.Any(role => user.IsInRole(role.Name)))
                {
                    if (!emails.Contains(userEmail))
                    {
                        emails.Add(userEmail);
                    }
                    continue;
                }
                //if current user is one of the selected one add his email
                if (selectedUsers.Any(u => string.Equals(u.Name, user.Name, StringComparison.InvariantCultureIgnoreCase)))
                {
                    if (!emails.Contains(userEmail))
                    {
                        emails.Add(userEmail);
                    }
                }
            }

            return emails;
        }
        //Derermines if current user is in one of the selected users (or is in a selected role)
        protected bool IsInSelectedList(Field recipientsField)
        {
            AccountSelectorField accountSelectorField = new AccountSelectorField(recipientsField);

            List<Account> selectedRoles = accountSelectorField.GetSelectedAccountsByType(AccountType.Role);
            List<Account> selectedUsers = accountSelectorField.GetSelectedAccountsByType(AccountType.User);

            if ((selectedUsers.Count + selectedRoles.Count) == 0) return false;

            User currentUser = Context.User;
            if (
                selectedUsers.Any(
                    user => string.Equals(user.Name, currentUser.Name, StringComparison.InvariantCultureIgnoreCase)))
                return true;

            if (selectedRoles.Any(role => currentUser.IsInRole(role.Name))) return true;

            return false;
        }