Zimbra is nice once it's up and running, and will do what you want, but it's not the easiest to install (people often mess up the DNS and Zimbra is very picky during install time with this as well as other requirements) and it's fairly heavy on resources (in my experience).
If you were to roll your own, consider a combination of Postfix, Postfixadmin (For virtual users/domain management in MySQL or Postgres database), Spamassassin, Dovecot + Dovecot SASL.. there are many howtos on the web about how to do this with Debian or Ubuntu, and I've done it myself.
I second Stever's 2 cents.. if a quick solution is important, running your own mailserver may cause you more grief than you expect, and especially if it breaks and you need to spend some time to fix it. If that sounds too much, may as well use Google Apps!
With my combination above, I recommend having a read of some of the howtos at HowtoForge, or read these
two guides (I've used both for reference in the past, and found problems with both - one day I'll write my own
