Dynamically selecting an IMAP server for authentication This information is valid for Horde 5 or later only. See ImapSelectH4 for Horde 4 or ImapSelectH3 for Horde 3. For Horde 5 or later there already exists an example hook for dynamic IMAP server selection in IMP (imp/config/hooks.php.dist). For the sake of completeness, here is a stripped down copy of the example:
class IMP_Hooks
{
/**
* AUTHENTICATION HOOK: pre-authentication actions.
*
* See horde/config/hooks.php.dist for more information.
*
* IMP uses the following credentials:
* - password: (string) The password for mail server authentication.
* - server: (string) [optional] Use this server key (see
* config/backends.php).
* - transparent: (boolean) If $credentials['authMethod'] is
* 'transparent', and you want IMP to use the
* userId/credentials generated in the preauthenticate
* hook, this must be true. If false, IMP will instead
* try to authenticate using hordeauth.
*
* The following credentials will exist in $credentials, but changing
* these values has no effect on authentication:
* - imp_server_key: (string; 'authenticate' only) The backend server
* key selected on the login page.
*/
public function preauthenticate($userId, $credentials)
{
if ($credentials['authMethod'] == 'authenticate') {
// Example: Load-balance - pick IMAP server based on first
// letter in username. Server entries 'server_[a-z]' must
// be defined in config/backends.local.php.
$credentials['server'] = 'server_' . substr($userId, 0, 1);
return array(
'credentials' => $credentials,
'userId' => $userId
);
}
return true;
}
}