Webmail

I set up my home server following the fantastic "The Perfect Server - Ubuntu 10.10 [ISPConfig 3]" guide here on HowtoForge and everything works great so far.

Because I followed the guide to the letter I obviously have Postfix mail server and squirrelMail but after looking around I'm thinking that Roundcube might be a better webmail option as it seems to have more features as well as appearing to be nicer Aesthetically.

I don't want to screw my perfectly working mail system up so I thought I'd better ask for some advice before I go ahead and start installing so....

What would be the best way to go about changing over to roundcube? Should I replace SquirrelMail with Roundcube or run them side by side? What might stuff up after the instillation? Where is the best Roundcube instillation guide?

Just quickly, I would also like to be able to access webmail by going to "mydomain.com/webmail" rather than having to type my servers IP (x.x.x.x/webmail) I have read a thread or two on how to achieve this which include suggestions including installing webmail in a subdirectory of mydomain/web but (and I'm only guessing here) couldn't this be achieved with a symlink in mydomain/web pointing to /user/share/webmail? and if so what form should the command to create the symlink take?

Which webmailer you want to use is your own decision.
I'd use only one of them. Because your customers will have questions on the webmailer and will need support in using it. If you offer them two different mailers you'll have to support them both.
On my server I only use roundcube.
This is how to do it as you want:

1. Create a folder /var/www/webmail
2. Install roundcube in this directory (it's really simple, just follow the install instructions)
3. To be able to access it from every vHost, create a file /etc/apache2/conf.d/roundcube.conf with this content:

except for adding the "+10" to the line "$rcmail_config['timezone'] = '+10';" nothing! I simply copied and pasted the file exactly as roundcube presented it to me during the instillation process using "vi" and then went through the file line by line to make sure all was correct.

For what it's worth, when I open the copy of the file that I made on my local machine by pasting the exact same contents to Notepad and saving just for the sake of having another copy of the file to look at and open it with Notepad++ line 156 is empty. It's the white space between...

// enforce connections over https
// with this option enabled, all non-secure connections will be redirected.
// set the port for the ssl connection as value of this option if it differs from the default 443
$rcmail_config['force_https'] = false;

...and

// automatically create a new Roundcube user when log-in the first time.
// a new user will be created once the IMAP login succeeds.
// set to false if only registered users can use this service
$rcmail_config['auto_create_user'] = true;

Actually now I look at it perhaps that second option should be set to false. I wasn't able to find a guide anywhere online that explained what all these configuration options meant so I was kind of guessing as I went, however you wouldn't expect that any of the would cause a white page.

// If you know your imap's root directory and its folder delimiter,
// you can specify them here. Otherwise they will be determined automatically.
$rcmail_config['imap_root'] = null;
$rcmail_config['imap_delimiter'] = null;

// By default IMAP capabilities are readed after connection to IMAP server
// In some cases, e.g. when using IMAP proxy, there's a need to refresh the list
// after login. Set to True if you've got this case.
$rcmail_config['imap_force_caps'] = false;

// SMTP HELO host
// Hostname to give to the remote server for SMTP 'HELO' or 'EHLO' messages
// Leave this blank and you will get the server variable 'server_name' or
// localhost if that isn't defined.
$rcmail_config['smtp_helo_host'] = '';

// enforce connections over https
// with this option enabled, all non-secure connections will be redirected.
// set the port for the ssl connection as value of this option if it differs from the default 443
$rcmail_config['force_https'] = false;

// automatically create a new Roundcube user when log-in the first time.
// a new user will be created once the IMAP login succeeds.
// set to false if only registered users can use this service
$rcmail_config['auto_create_user'] = true;

// Includes should be interpreted as PHP files
$rcmail_config['skin_include_php'] = false;

// Use an additional frequently changing cookie to athenticate user sessions.
// There have been problems reported with this feature.
$rcmail_config['double_auth'] = false;

// this key is used to encrypt the users imap password which is stored
// in the session record (and the client cookie if remember password is enabled).
// please provide a string of exactly 24 chars.
$rcmail_config['des_key'] = 'thS*m+rlJE8pz&XyYl1XzTnU';

// Whether or not to encrypt the IP address and the host name
// these could, in some circles, be considered as sensitive information;
// however, for the administrator, these could be invaluable help
// when tracking down issues.
$rcmail_config['http_received_header_encrypt'] = false;

// This string is used as a delimiter for message headers when sending
// a message via mail() function. Leave empty for auto-detection
$rcmail_config['mail_header_delimiter'] = NULL;

// number of chars allowed for line when wrapping text.
// text wrapping is done when composing/sending messages
$rcmail_config['line_length'] = 72;

// don't allow these settings to be overriden by the user
$rcmail_config['dont_override'] = array();

// Set identities access level:
// 0 - many identities with possibility to edit all params
// 1 - many identities with possibility to edit all params but not email address
// 2 - one identity with possibility to edit all params
// 3 - one identity with possibility to edit all params but not email address
$rcmail_config['identities_level'] = 0;

// Make use of the built-in spell checker. It is based on GoogieSpell.
// Since Google only accepts connections over https your PHP installatation
// requires to be compiled with Open SSL support
$rcmail_config['enable_spellcheck'] = true;

// Set the spell checking engine. 'googie' is the default. 'pspell' is also available,
// but requires the Pspell extensions. When using Nox Spell Server, also set 'googie' here.
$rcmail_config['spellcheck_engine'] = 'googie';

// For a locally installed Nox Spell Server, please specify the URI to call it.
// Get Nox Spell Server from http://orangoo.com/labs/?page_id=72
// Leave empty to use the Google spell checking service, what means
// that the message content will be sent to Google in order to check spelling
$rcmail_config['spellcheck_uri'] = '';

// These languages can be selected for spell checking.
// Configure as a PHP style hash array: array('en'=>'English', 'de'=>'Deutsch');
// Leave empty for default set of available language.
$rcmail_config['spellcheck_languages'] = NULL;

// don't let users set pagesize to more than this value if set
$rcmail_config['max_pagesize'] = 200;

// This indicates which type of address book to use. Possible choises:
// 'sql' (default) and 'ldap'.
// If set to 'ldap' then it will look at using the first writable LDAP
// address book as the primary address book and it will not display the
// SQL address book in the 'Address Book' view.
$rcmail_config['address_book_type'] = 'sql';

// In order to enable public ldap search, configure an array like the Verisign
// example further below. if you would like to test, simply uncomment the example.
$rcmail_config['ldap_public'] = array();

//
// If you are going to use LDAP for individual address books, you will need to
// set 'user_specific' to true and use the variables to generate the appropriate DNs to access it.
//
// The recommended directory structure for LDAP is to store all the address book entries
// under the users main entry, e.g.:
//
// o=root
// ou=people
// uid=user@domain
// mail=contact@contactdomain
//
// So the base_dn would be uid=%fu,ou=people,o=root
// The bind_dn would be the same as based_dn or some super user login.
/*
* example config for Verisign directory
*
$rcmail_config['ldap_public']['Verisign'] = array(
'name' => 'Verisign.com',
// Replacement variables supported in host names:
// %h - user's IMAP hostname
// %n - http hostname ($_SERVER['SERVER_NAME'])
// %d - domain (http hostname without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %d = domain.tld
'hosts' => array('directory.verisign.com'),
'port' => 389,
'use_tls' => false,
'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
// %fu - The full username provided, assumes the username is an email
// address, uses the username_domain value if not an email address.
// %u - The username prior to the '@'.
// %d - The domain name after the '@'.
// %dc - The domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
'base_dn' => '',
'bind_dn' => '',
'bind_pass' => '',
'writable' => false, // Indicates if we can write to the LDAP directory or not.
// If writable is true then these fields need to be populated:
// LDAP_Object_Classes, required_fields, LDAP_rdn
'LDAP_Object_Classes' => array("top", "inetOrgPerson"), // To create a new contact these are the object classes to specify (or any other classes you wish to use).
'required_fields' => array("cn", "sn", "mail"), // The required fields needed to build a new contact as required by the object classes (can include additional fields not required by the object classes).
'LDAP_rdn' => 'mail', // The RDN field that is used for new entries, this field needs to be one of the search_fields, the base of base_dn is appended to the RDN to insert into the LDAP directory.
'ldap_version' => 3, // using LDAPv3
'search_fields' => array('mail', 'cn'), // fields to search in
'name_field' => 'cn', // this field represents the contact's name
'email_field' => 'mail', // this field represents the contact's e-mail
'surname_field' => 'sn', // this field represents the contact's last name
'firstname_field' => 'gn', // this field represents the contact's first name
'sort' => 'cn', // The field to sort the listing by.
'scope' => 'sub', // search mode: sub|base|list
'filter' => '', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act
'fuzzy_search' => true, // server allows wildcard search
'sizelimit' => '0', // Enables you to limit the count of entries fetched. Setting this to 0 means no limit.
'timelimit' => '0', // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit.
);
*/

// An ordered array of the ids of the addressbooks that should be searched
// when populating address autocomplete fields server-side. ex: array('sql','Verisign');
$rcmail_config['autocomplete_addressbooks'] = array('sql');

// Defaults of the search field configuration.
// The array can contain a per-folder list of header fields which should be considered when searching
// The entry with key '*' stands for all folders which do not have a specific list set.
// Please note that folder names should to be in sync with $rcmail_config['default_imap_folders']
$rcmail_config['search_mods'] = null; // Example: array('*' => array('subject'=>1, 'from'=>1), 'Sent' => array('subject'=>1, 'to'=>1));

// 'Delete always'
// This setting reflects if mail should be always deleted
// when moving to Trash fails. This is necessary in some setups
// when user is over quota and Trash is included in the quota.
$rcmail_config['delete_always'] = false;

i'm setting up drupal multisites (shared codebase) in the same server, ISPConfig 3 hosting server. does anyone know and have successfully made roundcube webmail working for all the multisites, e.g. http://www.site-1.com/webmail, http://www.site-2.com/webmail, http://www.site-3.com/webmail etc, with the shared drupal codebase? if yes, it is much appreciated if you can provide the information? if not, can you provide some helpful information as well. thanks.

i'm setting up drupal multisites (shared codebase) in the same server, ISPConfig 3 hosting server. does anyone know and have successfully made roundcube webmail working for all the multisites, e.g. http://www.site-1.com/webmail, http://www.site-2.com/webmail, http://www.site-3.com/webmail etc, with the shared drupal codebase? if yes, it is much appreciated if you can provide the information? if not, can you provide some helpful information as well. thanks.

OK, the problem was that both the "main.inc.php" and "db.inc.php" files were missing the closing "?>"

So it's all working now. I did actually think of that but thats how Roundcube presented those files to me during the instillation process with the instructions to save the files exactly as they were to the appropriate directory so I figured that they knew what they were doing.

The issue I have now is getting "mydomain.com/webmail" to redirect to the directory that Roundcube is installed in. I followed the instructions above and created the "roundcube.conf" file but now when I go to "mydomain.com/webmail" the browser wants to download a file. When I download the file and open it in Notepad it has the following contents.

// If we are, go ahead to the login page.
header('Location: src/login.php');

?>

...which appears (based on my very limited programming knowledge) to be a script that checks to see if "SquirrelMail" is configured and if so go to the "SquirrelMail" login page. Perhaps a conflict between "Roundcube" and "SquirrelMail"???

Maybe also has something to do with the fact that I have to append :81 to the end of the domain name before the /webmail when accessing the server on a local machine because my server is listening on port 81 due to my routers refusal to forward to port 80.

OK, I got around things by changing the alias (in the instructions provided by TheWierd) from "webmail" to "mailbox" and now I get a server error 500 when trying to access mydomain.com/mailbox. I tried replacing this system with a symlink in the mydomain.com/web directory using the command ln -s /path/to/roundcube mydomain.com/mailbox which appears to have created the symlink OK and when I use ls -l the symlink appears to point to the roundcube directory but when I access mydomain.com/mailbox I get a server error again.