Para a parte SMTP, você pode usar tabelas de pesquisa no Postfix. Dependendo da sua escolha e do número de contas de usuário, você pode usar arquivos locais, MySQL ou OpenLDAP para armazenar as informações de pesquisa. Eu fiz isso com o OpenLDAP e funciona muito bem, embora a configuração inicial possa ser um pouco dolorosa.
Para a parte POP / IMAP Perdição é uma boa escolha. Ele também pode recuperar a localização da caixa de correio do usuário a partir de arquivos locais, MySQL ou OpenLDAP.
Outra forma de distribuir as caixas de correio seria usar o Cyrus Murder , mas não tenho certeza de quão estável é realmente. Alguns dizem que é, alguns dizem que não é.