public function syncVirtualAliasesWithUsers(array $users, array $groups)
 {
     $deleteVirtualUsersIds = [];
     $virtualUsers = $this->mtaConnector->getCurrentVirtualUsers(false);
     $groupPrefix = $this->configurator->get('group_prefix');
     $groupPrefixLength = strlen($groupPrefix);
     // delete fake user
     unset($users[array_search($this->configurator->get('collab_user'), $users)]);
     foreach ($virtualUsers as $virtualUser) {
         $vUid = explode('@', $virtualUser['email'])[0];
         // -group
         if (strlen($vUid) > $groupPrefixLength && substr($vUid, -$groupPrefixLength) === $groupPrefix) {
             $gvUid = substr($vUid, 0, -$groupPrefixLength);
             if (!in_array($gvUid, $groups)) {
                 $deleteVirtualUsersIds[] = $virtualUser['id'];
             } else {
                 unset($groups[array_search($gvUid, $groups)]);
             }
         } else {
             if (!in_array($vUid, $users)) {
                 $deleteVirtualUsersIds[] = $virtualUser['id'];
             } else {
                 unset($users[array_search($vUid, $users)]);
             }
         }
     }
     // Delete virtual_users . var_dump('Delete: ', $deleteVirtualUsersIds);
     if (!empty($deleteVirtualUsersIds)) {
         $deleteVirtualUsersIdsStr = join(',', $deleteVirtualUsersIds);
         $result = $this->mtaConnector->deleteVirtualUserIn($deleteVirtualUsersIdsStr);
         if ($result) {
             Helper::mailParserLoger('Deleted virtual user id: ' . $deleteVirtualUsersIdsStr);
         }
     }
     // Add new virtual_users Users . var_dump('Add users:', $users);
     if (!empty($users)) {
         foreach ($users as $user) {
             $this->onPreCreateUser($user, Helper::randomString(8));
         }
     }
     // Add new virtual_users Groups . var_dump('Add groups:', $groups);
     if (!empty($groups)) {
         foreach ($groups as $group) {
             $this->onPreCreateGroup($group);
         }
     }
 }