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

# qmail-send(8)

deliver mail messages from the queue

## NAME

qmail-send - deliver mail messages from the queue

## SYNOPSIS

**qmail-send**

## DESCRIPTION

**qmail-send** handles messages placed into the outgoing queue by **qmail-queue**. It uses **qmail-lspawn** to deliver messages to local recipients and **qmail-rspawn** to deliver messages to remote recipients. If a message is temporarily undeliverable to one or more addresses, **qmail-send** leaves it in the queue and tries the addresses again later.

**qmail-send** prints a readable record of its activities to descriptor 0. It writes commands to **qmail-lspawn**, **qmail-rspawn**, and **qmail-clean** on descriptors 1, 3, and 5, and reads responses from descriptors 2, 4, and 6. **qmail-send** is responsible for avoiding deadlock.

If **qmail-send** receives a TERM signal, it will exit cleanly, after waiting (possibly more than a minute) for current delivery attempts to finish.

If **qmail-send** receives an ALRM signal, it will reschedule every message in the queue for immediate delivery.

## CONTROL FILES

**WARNING:** **qmail-send** reads its control files only when it starts. If you change the control files, you must stop and restart **qmail-send**. Exception: If **qmail-send** receives a HUP signal, it will reread *locals* and *virtualdomains*.

- *bouncefrom*

  Bounce username. Default: **MAILER-DAEMON**.

- *bouncehost*

  Bounce host. Default: *me*, if that is supplied; otherwise the literal name **bouncehost**, which is probably not what you want. If a message is permanently undeliverable, **qmail-send** sends a **single-bounce** notice back to the message's envelope sender. The notice is **From: *bouncefrom*@*bouncehost*,** although its envelope sender is empty.

- *concurrencylocal*

  Maximum number of simultaneous local delivery attempts. Default: 10. If 0, local deliveries will be put on hold. *concurrencylocal* is limited at compile time to 120.

- *concurrencyremote*

  Maximum number of simultaneous remote delivery attempts. Default: 20. If 0, remote deliveries will be put on hold. *concurrencyremote* is limited at compile time to 120.

- *doublebouncehost*

  Double-bounce host. Default: *me*, if that is supplied; otherwise the literal name **doublebouncehost**, which is probably not what you want.

- *doublebounceto*

  User to receive double-bounces. Default: **postmaster**. If a single-bounce notice is permanently undeliverable, **qmail-send** sends a **double-bounce** notice to *doublebounceto**@**doublebouncehost*. (If that bounces, **qmail-send** gives up.)

- *envnoathost*

  Presumed domain name for addresses without @ signs. Default: *me*, if that is supplied; otherwise the literal name **envnoathost**, which is probably not what you want. If **qmail-send** sees an envelope recipient address without an @ sign, it appends **@*envnoathost*.**

- *locals*

  List of domain names that the current host receives mail for, one per line. Default: *me*, if that is supplied; otherwise **qmail-send** refuses to run. An address  *user@domain* is considered local if *domain* is listed in *locals*.

- *percenthack*

  List of domain names where the percent hack is applied. If *domain* is listed in *percenthack*, any address of the form *user%fqdn@domain* is rewritten as *user@fqdn*. *user* may contain %, so the percent hack may be applied repeatedly. **qmail-send** handles *percenthack* before *locals*.

- *queuelifetime*

  Number of seconds a message can stay in the queue. Default: 604800 (one week). After this time expires, **qmail-send** will try the message once more, but it will treat any temporary delivery failures as permanent failures.

- *virtualdomains*

  List of virtual users or domains, one per line. A virtual user has the form *user**@**domain**:**prepend*, without any extra spaces. When **qmail-send** sees the recipient address *user**@**domain*, it converts it to *prepend**-**user**@**domain* and treats it as local.

  A virtual domain has the form *domain**:**prepend*. It applies to any recipient address at *domain*. For example, if

  ```
       nowhere.mil:joe-foo
  ```

  is in *virtualdomains*, and a message arrives for **info@nowhere.mil**, **qmail-send** will rewrite the recipient address as **joe-foo-info@nowhere.mil** and deliver the message locally.

  *virtualdomains* may contain wildcards:

  ```
       .fax:uucp-fax
       :alias-catchall
       .nowhere.mil:joe-foo-host
  ```

  *virtualdomains* may also contain exceptions: an empty *prepend* means that *domain* is not a virtual domain.

  **qmail-send** handles *virtualdomains* after *locals*: if a domain is listed in *locals*, *virtualdomains* does not apply.

## SEE ALSO

[nice(1)](/nice/1.md), [addresses(5)](/addresses/5.md), [envelopes(5)](/envelopes/5.md), [qmail-control(5)](/qmail-control/5.md), [qmail-log(5)](/qmail-log/5.md), [qmail-queue(8)](/qmail-queue/8.md), [qmail-clean(8)](/qmail-clean/8.md), [qmail-lspawn(8)](/qmail-lspawn/8.md), [qmail-rspawn(8)](/qmail-rspawn/8.md)
