\documentclass{article}
\usepackage{ulem}
\pagestyle{headings}
\begin{document}
\part{ Dynamically selecting an IMAP server for authentication}
\textbf{Colortext: NIThis information is valid for Horde 4 only. See ImapSelectH3\footnote{http://example.com/index.php?page=ImapSelectH3} for Horde 3 or ImapSelect\footnote{http://example.com/index.php?page=ImapSelect} for Horde 5 and later.Colortext: NI}

\section{ An IMAP server selector hook function in Horde 4 \texttt{imp/config/hooks.php}}
\begin{verbatim}

class IMP_Hooks
{

public function preauthenticate($userId, $credentials)
{
    //Horde::logMessage('authM: '.$credentials['authMethod'].' id='.$userId, 'ERROR');
    //return true;

    /* when no userId given */
    if (empty($userId)) return true;

    /* list of ALL remote users */
    $remote_users = array('username@remoteserver.hu' => 'remote-imap-servers-key');

    /* local user */
    if (!array_key_exists($userId, $remote_users)) return true;

    /* remote user */
    return array('credentials' => array('server' => $remote_users[$userId],
                                        'transparent' => true,
                                        'password' => $GLOBALS['registry']->getAuthCredential('password')
                                  )
    );
}

}
\end{verbatim}

Set server list to 'hidden' in Imp prefs, and all backend's hordeauth to full.

\end{document}
