Penguin

IMP is the Internet Messaging Program. It is written in PHP and provides WebMail access to IMAP and POP3 accounts. Built on the Horde framework.

Notes

Using multiple servers in IMP

AddToMe: you can log into multiple servers based on vhost: edit the array in /etc/imp3/servers.conf

Adding a prefix based on the domain

Set $conf['hooks']['vinfo'] = 'imp_get_vinfo'; and create a function like so (note: new syntax for 3.2.2)

if (!function_exists('imp_get_vinfo')) {
    function imp_get_vinfo ($type = 'username') {
        global $conf, $imp;

        $vdomain = getenv('HTTP_HOST');
        $vdomain = preg_replace('|^webmail\.|i', '', $vdomain);
        $vdomain = strtolower($vdomain);

        if ($type == 'username') {
             return strtolower($_SESSION['imp']['user'] . '@' . $vdomain);
        } elseif ($type == "vdomain") {
            return $vdomain;
        } else {
            return new PEAR_Error('invalid type: ' . $type);
        }
    }
}

This syntax is for MetaNet Mail, where you log into Cyrus as user@domain.tld. It will remove webmail. from the vhost you connected from, and offer @the.rest.of.it as the suffix for the login, so you only have to enter user into the webmail box.

Smarter people can make it domain by domain specific by editing the function.

Errors using the alpha version of IMP/Horde

You need to upgrade your version of PHP if you're getting errors such as

Fatal error: Call to undefined function: is_a() in /var/www/webmail2/horde/lib/base.php on line 35

is_a() was introduced in PHP 4.2.0. You have to either revert to a really old version of PEAR (does PEAR even support pre-4.2.0 PHP?) or upgrade your PHP installation.