---
name: "makemap"
section: "8"
platform: "linux"
package: "opensmtpd"
version: "7.9.0p0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd", "openbsd"]
url: "https://new.carta.tech/makemap"
---

# makemap(8)

create database maps for smtpd

## NAME

**makemap** – create database maps for smtpd

## SYNOPSIS

**makemap** \[**-U**\] \[**-d** *dbtype*\] \[**-o** *dbfile*\] \[**-t** *type*\] *file*

## DESCRIPTION

Maps provide a generic interface for associating a textual key to a value. Such associations may be accessed through a plaintext file, database, or DNS. The format of these file types is described below. **makemap** itself creates the database maps used by keyed map lookups specified in [smtpd.conf(5)](/smtpd.conf/5.md).

**makemap** reads input from *file* and writes data to a file which is named by adding a “.db” suffix to *file*. The current line can be extended over multiple lines using a backslash (‘\\’). Comments can be put anywhere in the file using a hash mark (‘#’), and extend to the end of the current line. Care should be taken when commenting out multi-line text: the comment is effective until the end of the entire block. In all cases, **makemap** reads lines consisting of words separated by whitespace. The first word of a line is the database key; the remainder represents the mapped value. The database key and value may optionally be separated by the colon character.

The options are as follows:

- **-d** *dbtype*

  Specify the format of the database. Available formats are *hash* and *btree*. The default value is *hash*.

- **-o** *dbfile*

  Write the generated database to *dbfile*.

- **-t** *type*

  Specify the format of the resulting map file. The default map format is suitable for storing simple, unstructured, key-to-value string associations. However, if the mapped value has special meaning, as in the case of a virtual domains file, a suitable *type* must be provided. The available output types are:

  - **aliases**

    The mapped value is a comma-separated list of mail destinations. This format can be used for building user aliases and user mappings for virtual domain files.

  - **set**

    There is no mapped value – a map of this type will only allow for the lookup of keys. This format can be used for building primary domain maps.

- **-U**

  Instead of generating a database map from text input, dump the contents of a database map as text with the key and value separated with a tab.

## PRIMARY DOMAINS

Primary domains can be kept in tables. To create a primary domain table, add each primary domain on a single line by itself.

In addition to adding an entry to the primary domain map, one must add a filter rule that accepts mail for the domain map, for example:

```
table domains db:/etc/smtpd/domains.db
action "local" mbox
match for domain <domains> action "local"
```

## VIRTUAL DOMAINS

Virtual domains may also be kept in tables. To create a virtual domain table, add each virtual domain on a single line by itself.

Virtual domains expect a mapping of virtual users to real users in order to determine if a recipient is accepted or not. The mapping format is an extension to [aliases(5)](/aliases/5.md), which allows the use of “user@domain.tld” to accept user only on the specified domain, “user” to accept the user for any of the virtual domains, “@domain.tld” to provide a catch-all for the specified domain and “@” to provide a global catch-all for all domains. [smtpd(8)](/smtpd/8.md) will perform the lookups in that specific order.

To create a single virtual address, add “user@example.com user” to the users map. To handle all mail destined to any user at example.com, add “@example.com user” to the virtual map.

In addition to adding an entry to the virtual map, one must add a filter rule that accepts mail for virtual domains, for example:

```
table vdomains db:/etc/smtpd/vdomains.db
table vusers db:/etc/smtpd/users.db
action "local" mbox virtual <vusers>
match for domain <vdomains> action "local"
match for domain "example.org" action "local"
```

## FILES

- */etc/smtpd/aliases*

  List of user mail aliases.

- */etc/smtpd/secrets*

  List of remote host credentials.

## EXIT STATUS

The **makemap** utility exits 0 on success, and \>0 if an error occurs.

## SEE ALSO

[aliases(5)](/aliases/5.md), [smtpd.conf(5)](/smtpd.conf/5.md), [table(5)](/table/5.md), [newaliases(8)](/newaliases/8.md), [smtpd(8)](/smtpd/8.md)

## HISTORY

The **makemap** command first appeared in OpenBSD 4.6 as a replacement for the equivalent command shipped with sendmail.
