---
name: "qmail-smtpd"
section: "8"
platform: "linux"
package: "qmail"
version: "1.06-6.2~deb10u1"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/qmail-smtpd"
---

# qmail-smtpd(8)

receive mail via SMTP

## NAME

qmail-smtpd - receive mail via SMTP

## SYNOPSIS

**qmail-smtpd**

## DESCRIPTION

**qmail-smtpd** receives mail messages via the Simple Mail Transfer Protocol (SMTP) and invokes **qmail-queue** to deposit them into the outgoing queue. **qmail-smtpd** must be supplied several environment variables; see **[tcp-environ(5)](/tcp-environ/5.md)**.

**qmail-smtpd** is responsible for counting hops. It rejects any message with 100 or more  **Received** or **Delivered-To** header fields.

**qmail-smtpd** supports ESMTP, including the 8BITMIME and PIPELINING options.

## TRANSPARENCY

**qmail-smtpd** converts the SMTP newline convention into the UNIX newline convention by converting CR LF into LF. It returns a temporary error and drops the connection on bare LFs; see **http://pobox.com/~djb/docs/smtplf.html**.

**qmail-smtpd** accepts messages that contain long lines or non-ASCII characters, even though such messages violate the SMTP protocol.

## CONTROL FILES

- *badmailfrom*

  Unacceptable envelope sender addresses. **qmail-smtpd** will reject every recipient address for a message if the envelope sender address is listed in *badmailfrom*. A line in *badmailfrom* may be of the form **@*host***, meaning every address at *host*.

- *databytes*

  Maximum number of bytes allowed in a message, or 0 for no limit. Default: 0. If a message exceeds this limit, **qmail-smtpd** returns a permanent error code to the client; in contrast, if the disk is full or **qmail-smtpd** hits a resource limit, **qmail-smtpd** returns a temporary error code.

  *databytes* counts bytes as stored on disk, not as transmitted through the network. It does not count the **qmail-smtpd** Received line, the **qmail-queue** Received line, or the envelope.

  If the environment variable **DATABYTES** is set, it overrides *databytes*.

- *localiphost*

  Replacement host name for local IP addresses. Default: *me*, if that is supplied. **qmail-smtpd** is responsible for recognizing dotted-decimal addresses for the current host. When it sees a recipient address of the form *box@\[d.d.d.d\]*, where *d.d.d.d* is a local IP address, it replaces *\[d.d.d.d\]* with *localiphost*. This is done before *rcpthosts*.

- *morercpthosts*

  Extra allowed RCPT domains. If *rcpthosts* and *morercpthosts* both exist, *morercpthosts* is effectively appended to *rcpthosts*.

  You must run **qmail-newmrh** whenever *morercpthosts* changes.

  Rule of thumb for large sites: Put your 50 most commonly used domains into *rcpthosts*, and the rest into *morercpthosts*.

- *rcpthosts*

  Allowed RCPT domains. If *rcpthosts* is supplied, **qmail-smtpd** will reject any envelope recipient address with a domain not listed in *rcpthosts*.

  Exception: If the environment variable **RELAYCLIENT** is set, **qmail-smtpd** will ignore *rcpthosts*, and will append the value of **RELAYCLIENT** to each incoming recipient address.

  *rcpthosts* may include wildcards:

  ```
     heaven.af.mil
     .heaven.af.mil
  ```

  Envelope recipient addresses without @ signs are always allowed through.

- *smtpgreeting*

  SMTP greeting message. Default: *me*, if that is supplied; otherwise **qmail-smtpd** will refuse to run. The first word of *smtpgreeting* should be the current host's name.

- *timeoutsmtpd*

  Number of seconds **qmail-smtpd** will wait for each new buffer of data from the remote SMTP client. Default: 1200.

## RECIPIENT VERIFICATION

Recipient verification is enabled with the **VERIFY** environment variable. This can be used to specify per-recipient rejection of invalid recipient addresses (immediate verification causing a permanent 550 error response to the RCPT command), or deferred rejection at DATA time (554 response) of the whole session if any recipient addresses don't exist.

To verify an address, **qmail-smtpd** uses a separate **qmail-verify** UDP server. By default this will be on the loopback address 127.0.0.1, port 11113. Enable verification like this,

```
   VERIFY=":"
   VERIFY="DEFER"
```

(for immediate, deferred verification respectively). A different IP address and/or port can be specified for **qmail-verify** as in these examples,

```
   VERIFY="192.168.1.1"
   VERIFY=":10101"
   VERIFY="DEFER,:10101"
   VERIFY="DEFER,192.168.1.1:10101"
```

Recipient verification may be explicitly disabled by setting **VERIFY** to an empty string,

```
   VERIFY=""
```

Addresses with domains appearing in **control/rcpthosts** but not in **control/locals** or **control/virtualdomains** will be considered valid, reflecting qmail's standard behaviour.

Note that if the environment variable **RELAYCLIENT** is set, no checking is carried out.

**qmail-verify** needs to be running to respond to recipient verification queries. If no **qmail-verify** response is received a temporary 451 error response is given to the remote system and the session terminated.

## SEE ALSO

[tcp-env(1)](/tcp-env/1.md), [tcp-environ(5)](/tcp-environ/5.md), [qmail-control(5)](/qmail-control/5.md), [qmail-inject(8)](/qmail-inject/8.md), [qmail-newmrh(8)](/qmail-newmrh/8.md), [qmail-queue(8)](/qmail-queue/8.md), [qmail-remote(8)](/qmail-remote/8.md), [qmail-verify(8)](/qmail-verify/8.md)
