oreilly.comSafari Books Online.Conferences.


Building an Advanced Mail Server
Pages: 1, 2


The wonderful folks over at Inter7 developed vpopmail to handle the management of virtual domains using Qmail. Unfortunately vpopmail is limited to a measly 23 million virtual hosts, of which each are limited to only 23 million users. So if you have more than 529 trillion users you may need to look elsewhere.

Creating the vpopmail User and Group

As noted in vpopmail's INSTALL file, "[the] FreeBSD folks have reserved 89 for the group and 89 for the user for vpopmail." You will probably want to ensure vpopmail is running as uid and gid 89.

bash$ groupadd -g 89 vchkpw
bash$ useradd -g vchkpw -u 89 -d /path/to/where/you/want vpopmail

I installed vpopmail into /var/lib/vpopmail, but you can put it wherever you wish. Just remember that all email messages will be stored in /var/lib/vpopmail, so choose a partition with plenty of room.

Setting up MySQL Support

The first thing you need to do is set up vpopmail for MySQL. This is done by doing some light code editing in a header file. Fire up your favorite editor. Open up the file vmysql.h and change the following lines to match the configuration you set up in the MySQL section of this article:

#define MYSQL_UPDATE_SERVER "localhost"
#define MYSQL_UPDATE_USER   "vpopmail"
#define MYSQL_UPDATE_PASSWD "password"

#define MYSQL_READ_SERVER   "localhost"
#define MYSQL_READ_USER     "vpopmail"
#define MYSQL_READ_PASSWD   "password"

Installing vpopmail

After you have finished editing vmysql.h, compile the program. Be sure to run ./configure --help before configuring the software. Below is what I used to enable MySQL support and install vpopmail.

bash$ ./configure \

There are a few things to note in the above configuration that you may want to change to suit your needs.

  • I disable --enable-auth-logging because SquirrelMail logs in and out every time a page is loaded, which can make logs grow quickly on active mail servers.

  • The e option to --enable-logging enables logging only of errors.

  • --enable-defaultquota The default quota can be computed by using the equation (MB * 1024 * 1024) where MB is the number of megabytes you would like your default quota to be.

  • You may need to specify the location of your MySQL include and library directories with --enable-incdir and --enable-libdir.

  • By disabling /etc/passwd with --enable-passwd=n, only virtual users will have access to our mail server.

  • NFS users may wish to look at the --enable-file-locking and --enable-file-sync options. Because Qmail uses the alternative Maildir format to store messages, it works quite nicely with NFS.

After running the configure script, compile and install vpopmail with the following commands:

bash$ make
bash$ make install-strip

Note: Debian has packages for vpopmail, however I could not get them working properly with MySQL.

Creating Domains

Adding domains is extremely simple. Before you create a domain you will want to read the man pages for vadddomain. There are options for mail delivery, quotas, etc.

bash$ /path/to/vpopmail/bin/vadddomain password

password is the password for, who will be the administrator for that domain. After you have created the domain your domain's user directories and .qmail files will exist in /path/to/vpopmail/domains/

Adding Users

You can use either qmailadmin to create users or vpopmail's vadduser.

bash$ /path/to/vpopmail/bin/vadduser password

Courier IMAP

Courier IMAP is another piece of software by Inter7. It's a simple IMAP server that was created specifically to work with Maildir. Read over the INSTALL file before we get started to familiarize yourself with the installation process.

bash$ ./configure \ 
      --prefix=/usr/local/courier-imap \
      --with-ssl \
bash$ make
bash$ make install
bash$ make install-configure

NOTE: --with-ssl is optional

Once you are done installing Courier IMAP, you need to edit a few configuration options in its configuration file. Open /usr/local/courier-imap/etc/imapd in your favorite editor and change the following options.

editor's note: some of these options could use further explanation

  • Change MAXDAEMONS to 40.

  • Raise MAXPERIP to 100. (Many users will be using the web interface, which all come from a single IP.)

  • Change TCPDOPTS to "-nodnslookup -noidentlookup -user=vpopmail -group=vchkpw".

  • Change AUTHMODULES to "authvchkpw" to use vpopmail's authentication.

  • Change IMAP_EMPTYTRASH=Trash:7,Sent:30 to whatever you want. This option tells Courier to clear out these folders every 7 and 30 days, respectively. You can add extra folders there as well that you wish to have the server empty periodically.

  • Change IMAPDSTART to YES.

After you have all of this up and running, you should be ready to fire up your IMAP server. To start Courier IMAP at boot, copy /usr/local/src/courier-imap-1.7.x/courier-imap.sysvinit to the directory appropriate for your distro (many use /etc/init.d).

bash$ cp /usr/local/src/courier-imap-1.7.x/courier-imap.sysvinit \
bash$ chmod 744 /etc/init.d/courier-imap
bash$ /etc/init.d/courier-imap start


qmailadmin is a CGI interface to vpopmail. It is totally optional, but will make administering your virtual domains, users, forwards, etc. much easier. Not only does it allow your postmaster to create and manage accounts, forwards, and aliases, but it allows users to log in and change passwords, set vacation messages, etc.

Note: qmailadmin requires EZMLM, DJB's mailing list manager, which you may not wish to install. You can skip this step.

Installing autoresponder

autoresponder is a prerequisite of qmailadmin and does basic auto responding. After you have extracted the source, change into the package's directory.

bash$ make
bash$ make man
bash$ make setup

Installing EZMLM

EZMLM is DJB's mailing list software which works great with Qmail. EZMLM's main website has been down for quite some time. I suggest you grab the source from DJB's EZMLM page. You will most likely wish to patch EZMLM with the famous IDX patch which adds a plethora of options. I found a working mirror where you can download ezmlm-idx-0.40.tar.gz. After you have extracted both the EZMLM source and the IDX patch, install EZMLM.

bash$ mv ezmlm-idx-0.xx/* ezmlm-0.53/
bash$ cd ezmlm-0.53
bash$ patch < idx.patch
bash$ make mysql
bash$ make clean
bash$ make && make man
bash$ make setup

Installing qmailadmin

bash$ ./configure \

There are several options to look into if you plan to allow clients to administer their own domains. --enable-maxpopusers and --enable-maxmailinglists are just two of the options you may wish to use. Be sure to check out ./configure --help for a complete list of options.

bash$ make
bash$ make install-strip

After you have installed qmailadmin, you should be able to log in to to to administer your domains.


Now that you have everything installed and have created your users, you should be able to log in. Because vpopmail uses virtual hosts your username will be, which is important to remember. Because of Qmail's flexibility and the power of vpopmail's MySQL support you can easily create domains and hand over the ability to manage accounts to your customers, which leaves plenty of free time.

Now that your mail server is running the hard part is over, but it is not yet complete. The second part of our series will cover installing Apache+PHP and Squirrel Mail. We will also customize Squirrel Mail with a few plugins that will make managing your web mail system a lot easier. In the third and final part of our series, you will see how easy it is to integrate both virus and spam protection into your new mail server.

Joe Stump is the Lead Architect for Digg where he spends his time partitioning data, creating internal services, and ensuring the code frameworks are in working order.

Return to the Linux DevCenter.

Linux Online Certification

Linux/Unix System Administration Certificate Series
Linux/Unix System Administration Certificate Series — This course series targets both beginning and intermediate Linux/Unix users who want to acquire advanced system administration skills, and to back those skills up with a Certificate from the University of Illinois Office of Continuing Education.

Enroll today!

Linux Resources
  • Linux Online
  • The Linux FAQ
  • Linux Kernel Archives
  • Kernel Traffic

  • Sponsored by: