I'm planning to implement a wrapper for Cyrus IMAP. I know, Cyrus is more complicated to install, but it has some advantages:
- More scalable than Courier
- Sieve mail filtering support
- Easy quota checking, e.g. for webmail clients
Integrating Cyrus support into ISPConfig won't be such a big deal, BUT:
Cyrus doesn't use system quotas, as it's running with its own user and group. This way quotas have to be setup directly in cyrus. That itself isn't a problem, as this could be handled similar to mbox files, but with mbox, you can limit the size by putting the mailboxes on a quota partition - with cyrus there is no such possibility.
This leads me to my question concerning a "mailbox size policy".
There are some different options how it could be managed:
1) The total size of all users' mailboxes (of one website) can't be more than the diskspace available to this web.
1a) This total size is subtracted from the group quota. Disadvantage: You might have used already more than the new group quota
1b) No subtraction takes place. Disadvantage: A website might use the double amount of space it was assigned.
2) Do it like the new SQL quota. Resellers have a limit_mail_space or sth like that, websites have a web_mail_space and can assign their users mailbox space from this mail space pool.
Advantage: Very flexible
Disadv.: A lot of different quotas
3) Resellers have just one total space limit, which includes sql, mail and web. Resellers then can setup webs:
sum(web) + sum(sql) + sum(web_mail_space) <= limit_space
Each website gets a web_mail_space quota, which is the maximum amount of space that can be dedicated to mailboxes:
sum(mailboxes) <= web_mail_space
Advantage: This gives (almost) maximum flexibility to resellers for their offers, but keeps handling resellers quite simple.
Disadvantage: I would have to change the sql quota handling, as currently there is a seperate reseller limit for it (but I guess as it's just been in trunk one day right now this shouldn't break anything *g*)
4) Just like 2 and 3 combined. One great total quota, but also seperate space quotas for web, mail, mysql. This way you can e.g. say "the reseller may use 1 GB of total space, but he may never assign more than 200 MB of database space"
Advantage: You can do whatever you want to
Really maximum flexibility.
Disadv.: Much harder to implement.
What do you think?
I like 3), especially because it could be extended to 4) in future without breaking anything.
Hope you answer fast as I want to start as fast as possible... and I want to try getting it finished until friday.