makehosteddomains(1) Build a database of hosted domains





rebuilds the contents of the /etc/courier/hosteddomains.dat database from the contents of /etc/courier/hosteddomains. This can be either a file or a directory. If it's a directory, the contents of all the files in this directory are simply concatenated. Note that this build of courier ignores any files that match the regex pattern ".*.dpkg-[a-z]*" (dpkg configuration file handling) and ".*~" (backup files of some editors). The makehosteddomains script must be run in order for any changes to /etc/courier/hosteddomains to take effect.

The function of /etc/courier/hosteddomains is very similar to the one of /etc/courier/locals. Both configuration files specify a list of domains that are considered to be local domains - domains whose mailboxes are stored locally.

The difference is that domains listed in /etc/courier/locals are removed from addresses before their mailbox is looked up. For example, if the domain "" is listed in /etc/courier/locals, then the address <[email protected]> is delivered to a local mailbox named "user". If this domain is listed, instead, in /etc/courier/hosteddomains, then the address <[email protected]> is delivered to a local mailbox named "[email protected]". Usually you would use /etc/courier/locals to specify domains that correspond to your local system accounts, that are looked up in your system's password database. The /etc/courier/hosteddomains file is usually used when you have database-based virtual domains, that are maintained via an LDAP or a MySQL server. The Courier mail server's LDAP and MySQL authentication modules will use the full E-mail address to query the LDAP or MySQL server for the location of the local mailbox that correspond to the E-mail address. The Courier mail server's authuserdb authentication module can also use full E-mail addresses.

Contents of hosteddomains

The file /etc/courier/hosteddomains simply contains a list of domains, one per line, for example:

Each domain can optionally be followed by a single tab character, in order to specify an alias for a domain, for example:<TAB><TAB>

First, we list the domain "" as a hosted domain. Then, we also list the domain "", which is an alias for The Courier mail server will take any address of the form <[email protected]>, rewrite it as <[email protected]>, and attempt to deliver the mail to a local mailbox for that name. The third entry does the same for ""; mail addressed to <[email protected]> is delivered to the local mailbox <[email protected]>.


This is a special local mail delivery rule for hosteddomain-listed domains. This rule allows the Courier mail server accept mail to any address@hosteddomain, where "hosteddomain" is a domain listed in the hosteddomains file, but there is no corresponding account for address@hosteddomain. To provide delivery instructions for any non-existing address in a hosteddomain-listed domain:

1) Create the local address alias@hosteddomain. For example, if the hosteddomains file contains "", create the local account [email protected]. This should be a normal account, with its own home directory, userid and groupid.

2) Create $HOME/.courier-default file in this account, containing the delivery instructions. See the m[blue]dot-courier(5)m[][1] manual page for available delivery instructions.

NOTE that [email protected] must be a real account, not a mail alias. If you want to forward [email protected] to another address, put forwarding instructions in the .courier-default file. However, [email protected] can be a clone of another account (with the same home directory, userid, and groupid).


Wildcard DNS is supported for hosteddomains by placing a single period character before the domain name. For example, the hosted domain entry "" will cause the Courier mail server to accept mail for "".

The Courier mail server will accept mail for <[email protected]> and attempt to deliver it to the local mailbox <[email protected]>, and if that fails then attempt to deliver the mail to the local mailbox <[email protected]>, then finally <[email protected]>


There is a period after the '@' character. If you want all mail for "" to be delivered as though it were sent to "", you should define an alias for the domain, for example:<TAB>


Sam Varshavchik



[set $man.base.url.for.relative.links]/dot-courier.html
[set $man.base.url.for.relative.links]/esmtpd.html