Installing vpopmail

11 Mar 2004 09:33 qmail

Installing vpopmail

vpopmail is available from The latest version available at the time of this article was 5.4.0, so I grabbed that.

Installation proceeded exactly as laid out in the INSTALL file:

# groupadd -g 89 vchkpw
# useradd -g vchkpw -u 89 vpopmail
# mkdir -p /home/vpopmail
# chown vpopmail.vchkpw /home/vpopmail
# cd /usr/local/src/vpopmail-5.4.0
# ./configure
# make
# make install-strip

Configuring the first virtual domain

As mentioned above, peculiar handles the email for a bunch of different domains. I’d like to configure each one of these as a different virtual domain. In order to mirror the real system, these are:

  • differentpla.test (for
  • beerology.test (for

Adding the first domain is easy:

# cd /home/vpopmail/bin
# ./vadddomain beerology.test

It’ll prompt for the postmaster password. For now, I’ll just use “password”. I’ll be using something more secure on the live system.

Configuring the first virtual user

Adding the first user is also easy:

# cd /home/vpopmail/bin
# ./vadduser roger@beerology.test password

Again, I’m using “password” as the password.

Configuring internal DNS

Rather than break my existing setup, I’m going to tweak my internal DNS to point some fake domains at the test box. In /etc/bind/named.conf:

// Test domains go here

zone "beerology.test" {
        type master;
        file "/etc/bind/db.beerology.test";

In /etc/bind/db.beerology.test:

@       IN      SOA (
                        200403101       ; serial, todays date+todays serial
                        7200            ; refresh, seconds
                        7200            ; retry, seconds
                        3600000         ; expire, seconds
                        86400 )         ; minimum, seconds


flimsy          A

beerology.test. IN MX 10 flimsy.beerology.test.

Then we can restart bind and test it:

# /etc/init.d/bind stop
# /etc/init.d/bind start
# nslookup
> flimsy.beerology.test

Name:   flimsy.beerology.test
> set type=MX
> beerology.test

beerology.test  mail exchanger = 10 flimsy.beerology.test.

Testing it

So, with vpopmail installed and configured and with DNS configured correctly, I can send an email from my normal address to roger@beerology.test. It turns up in /home/vpopmail/domains/beerology.test/roger/Maildir correctly. Hurrah!

POP3 with vpopmail

Now to configure POP3 access. Again, this is explained in the vpopmail INSTALL file. My /var/qmail/supervise/qmail-pop3d/run file looks like this:

exec /usr/local/bin/softlimit -m 3000000 \
    /usr/local/bin/tcpserver -v -R -H -l 0 0 110 \
    /var/qmail/bin/qmail-popup $FQDN \
    /home/vpopmail/bin/vchkpw \
    /var/qmail/bin/qmail-pop3d Maildir 2>&1

To test that from Outlook Express, I set up another account as follows:

Display Name: Roger Lipscombe
Email Address: roger@beerology.test
POP3 Server: flimsy.beerology.test
SMTP Server: flimsy.beerology.test
User ID: roger@beerology.test
Password: password

A quick push of the “Send/Receive” button and the message that I sent earlier arrives in my Inbox!

SMTP AUTH with vpopmail

To use vchkpw for checking passwords for SMTP AUTH, I had to change my /var/qmail/supervise/qmail-smtpd/run file, replacing /bin/checkpassword with /home/vpopmail/bin/vchkpw.

So that vchkpw can access the password database, I changed the account which qmail-smtpd runs under:


# QMAILDUID=`id -u qmaild`
# NOFILESGID=`id -g qmaild`
VPOPUID=`id -u vpopmail`
VPOPGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`

if [ -z "$VPOPUID" -o -z "$VPOPGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
    echo VPOPUID, VPOPGID, MAXSMTPD or LOCAL is unset in
    echo /var/qmail/supervise/qmail-smtpd/run
    exit 1

if [ ! -f /var/qmail/control/rcpthosts ]; then
    echo "No /var/qmail/control/rcpthosts!"
    echo "Refusing to start SMTP listener because it'll create an open relay"
    exit 1

exec /usr/local/bin/softlimit -m 3000000 \
    /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb \
        -c "$MAXSMTPD" -u "$VPOPUID" -g "$VPOPGID" 0 smtp \
        /var/qmail/bin/qmail-smtpd \
        /home/vpopmail/bin/vchkpw \
        /bin/true 2>&1

Testing with Outlook Express shows that this works.

Adding another domain

To test that the accounts truly are separate, I configured another domain, this one differentpla.test, similarly to the above. Nothing exciting happened; it just worked.