QMGR(8) System Manager's Manual QMGR(8)

# [NAME](#NAME)

qmgr - Postfix queue manager

# [SYNOPSIS](#SYNOPSIS)

```
qmgr [generic Postfix daemon options]
```

# [DESCRIPTION](#DESCRIPTION)

The [**qmgr**(8)](/man/os/postfix/qmgr.8) daemon awaits the arrival of incoming mail and arranges for its delivery via Postfix delivery processes. The actual mail routing strategy is delegated to the [**trivial-rewrite**(8)](/man/os/postfix/trivial-rewrite.8) daemon. This program expects to be run from the [**master**(8)](/man/os/postfix/master.8) process manager.

Mail addressed to the local **double-bounce** address is logged and discarded. This stops potential loops caused by undeliverable bounce notifications.

# [MAIL QUEUES](#MAIL_QUEUES)

```

```

The [**qmgr**(8)](/man/os/postfix/qmgr.8) daemon maintains the following queues:

[**incoming**](#incoming)

Inbound mail from the network, or mail picked up by the local [**pickup**(8)](/man/os/postfix/pickup.8) daemon from the **maildrop** directory.

[**active**](#active)

Messages that the queue manager has opened for delivery. Only a limited number of messages is allowed to enter the **active** queue (leaky bucket strategy, for a fixed delivery rate).

[**deferred**](#deferred)

Mail that could not be delivered upon the first attempt. The queue manager implements exponential backoff by doubling the time between delivery attempts.

[**corrupt**](#corrupt)

Unreadable or damaged queue files are moved here for inspection.

[**hold**](#hold)

Messages that are kept "on hold" are kept here until someone sets them free.

# [DELIVERY STATUS REPORTS](#DELIVERY_STATUS_REPORTS)

```

```

The [**qmgr**(8)](/man/os/postfix/qmgr.8) daemon keeps an eye on per-message delivery status reports in the following directories. Each status report file has the same name as the corresponding message file:

[**bounce**](#bounce)

Per-recipient status information about why mail is bounced. These files are maintained by the [**bounce**(8)](/man/os/postfix/bounce.8) daemon.

[**defer**](#defer)

Per-recipient status information about why mail is delayed. These files are maintained by the [**defer**(8)](/man/os/postfix/defer.8) daemon.

[**trace**](#trace)

Per-recipient status information as requested with the Postfix "**sendmail -v**" or "**sendmail -bv**" command. These files are maintained by the [**trace**(8)](/man/os/postfix/trace.8) daemon.

The [**qmgr**(8)](/man/os/postfix/qmgr.8) daemon is responsible for asking the [**bounce**(8)](/man/os/postfix/bounce.8), [**defer**(8)](/man/os/postfix/defer.8) or [**trace**(8)](/man/os/postfix/trace.8) daemons to send delivery reports.

# [STRATEGIES](#STRATEGIES)

```

```

The queue manager implements a variety of strategies for either opening queue files (input) or for message delivery (output).

[**leaky bucket**](#leaky)

This strategy limits the number of messages in the **active** queue and prevents the queue manager from running out of memory under heavy load.

[**fairness**](#fairness)

When the **active** queue has room, the queue manager takes one message from the **incoming** queue and one from the **deferred** queue. This prevents a large mail backlog from blocking the delivery of new mail.

[**slow start**](#slow)

This strategy eliminates "thundering herd" problems by slowly adjusting the number of parallel deliveries to the same destination.

[**round robin**](#round)

The queue manager sorts delivery requests by destination. Round-robin selection prevents one destination from dominating deliveries to other destinations.

[**exponential backoff**](#exponential)

Mail that cannot be delivered upon the first attempt is deferred. The time interval between delivery attempts is doubled after each attempt.

[**destination status cache**](#destination)

The queue manager avoids unnecessary delivery attempts by maintaining a short-term, in-memory list of unreachable destinations.

[**preemptive message scheduling**](#preemptive)

The queue manager attempts to minimize the average per-recipient delay while still preserving the correct per-message delays, using a sophisticated preemptive message scheduling.

# [TRIGGERS](#TRIGGERS)

```

```

On an idle system, the queue manager waits for the arrival of trigger events, or it waits for a timer to go off. A trigger is a one-byte message. Depending on the message received, the queue manager performs one of the following actions (the message is followed by the symbolic constant used internally by the software):

[**D (QMGR\_REQ\_SCAN\_DEFERRED)**](#D)

Start a deferred queue scan. If a deferred queue scan is already in progress, that scan will be restarted as soon as it finishes.

[**I (QMGR\_REQ\_SCAN\_INCOMING)**](#I)

Start an incoming queue scan. If an incoming queue scan is already in progress, that scan will be restarted as soon as it finishes.

[**A (QMGR\_REQ\_SCAN\_ALL)**](#A)

Ignore deferred queue file time stamps. The request affects the next deferred queue scan.

[**F (QMGR\_REQ\_FLUSH\_DEAD)**](#F)

Purge all information about dead transports and destinations.

[**W (TRIGGER\_REQ\_WAKEUP)**](#W)

Wakeup call, This is used by the master server to instantiate servers that should not go away forever. The action is to start an incoming queue scan.

The [**qmgr**(8)](/man/os/postfix/qmgr.8) daemon reads an entire buffer worth of triggers. Multiple identical trigger requests are collapsed into one, and trigger requests are sorted so that **A** and **F** precede **D** and **I**. Thus, in order to force a deferred queue run, one would request **A F D**; in order to notify the queue manager of the arrival of new mail one would request **I**.

# [STANDARDS](#STANDARDS)

```
RFC 3463 (Enhanced status codes)
RFC 3464 (Delivery status notifications)
```

# [SECURITY](#SECURITY)

```

```

The [**qmgr**(8)](/man/os/postfix/qmgr.8) daemon is not security sensitive. It reads single-character messages from untrusted local users, and thus may be susceptible to denial of service attacks. The [**qmgr**(8)](/man/os/postfix/qmgr.8) daemon does not talk to the outside world, and it can be run at fixed low privilege in a chrooted environment.

# [DIAGNOSTICS](#DIAGNOSTICS)

Problems and transactions are logged to [**syslogd**(8)](/man/os/postfix/syslogd.8) or [**postlogd**(8)](/man/os/postfix/postlogd.8). Corrupted message files are saved to the **corrupt** queue for further inspection.

Depending on the setting of the **notify\_classes** parameter, the postmaster is notified of bounces and of other trouble.

# [BUGS](#BUGS)

A single queue manager process has to compete for disk access with multiple front-end processes such as [**cleanup**(8)](/man/os/postfix/cleanup.8). A sudden burst of inbound mail can negatively impact outbound delivery rates.

# [CONFIGURATION PARAMETERS](#CONFIGURATION_PARAMETERS)

```

```

Changes to **main.cf** are not picked up automatically as [**qmgr**(8)](/man/os/postfix/qmgr.8) is a persistent process. Use the "**postfix reload**" command after a configuration change.

The text below provides only a parameter summary. See [**postconf**(5)](/man/os/postfix/postconf.5) for more details including examples.

In the text below, *transport* is the first field in a **master.cf** entry.

# [COMPATIBILITY CONTROLS](#COMPATIBILITY_CONTROLS)

```

```

Available before Postfix version 2.5:

[**allow\_min\_user (no)**](#allow_min_user)

Allow a sender or recipient address to have \`-' as the first character.

Available with Postfix version 2.7 and later:

[**default\_filter\_nexthop (empty)**](#default_filter_nexthop)

When a content\_filter or FILTER request specifies no explicit next-hop destination, use $default\_filter\_nexthop instead; when that value is empty, use the domain in the recipient address.

# [ACTIVE QUEUE CONTROLS](#ACTIVE_QUEUE_CONTROLS)

```

```

[**qmgr\_clog\_warn\_time (300s)**](#qmgr_clog_warn_time)

The minimal delay between warnings that a specific destination is clogging up the Postfix active queue.

[**qmgr\_message\_active\_limit (20000)**](#qmgr_message_active_limit)

The maximal number of messages in the active queue.

[**qmgr\_message\_recipient\_limit (20000)**](#qmgr_message_recipient_limit)

The maximal number of recipients held in memory by the Postfix queue manager, and the maximal size of the short-term, in-memory "dead" destination status cache.

[**qmgr\_message\_recipient\_minimum (10)**](#qmgr_message_recipient_minimum)

The minimal number of in-memory recipients for any message.

[**default\_recipient\_limit (20000)**](#default_recipient_limit)

The default per-transport upper limit on the number of in-memory recipients.

[**transport\_recipient\_limit ($default\_recipient\_limit)**](#transport_recipient_limit)

A transport-specific override for the default\_recipient\_limit parameter value, where *transport* is the master.cf name of the message delivery transport.

[**default\_extra\_recipient\_limit (1000)**](#default_extra_recipient_limit)

The default value for the extra per-transport limit imposed on the number of in-memory recipients.

[**transport\_extra\_recipient\_limit ($default\_extra\_recipient\_limit)**](#transport_extra_recipient_limit)

A transport-specific override for the default\_extra\_recipient\_limit parameter value, where *transport* is the master.cf name of the message delivery transport.

Available in Postfix version 2.4 and later:

[**default\_recipient\_refill\_limit (100)**](#default_recipient_refill_limit)

The default per-transport limit on the number of recipients refilled at once.

[**transport\_recipient\_refill\_limit ($default\_recipient\_refill\_limit)**](#transport_recipient_refill_limit)

A transport-specific override for the default\_recipient\_refill\_limit parameter value, where *transport* is the master.cf name of the message delivery transport.

[**default\_recipient\_refill\_delay (5s)**](#default_recipient_refill_delay)

The default per-transport maximum delay between refilling recipients.

[**transport\_recipient\_refill\_delay ($default\_recipient\_refill\_delay)**](#transport_recipient_refill_delay)

A transport-specific override for the default\_recipient\_refill\_delay parameter value, where *transport* is the master.cf name of the message delivery transport.

# [DELIVERY CONCURRENCY CONTROLS](#DELIVERY_CONCURRENCY_CONTROLS)

```

```

[**initial\_destination\_concurrency (5)**](#initial_destination_concurrency)

The initial per-destination concurrency level for parallel delivery to the same destination.

[**default\_destination\_concurrency\_limit (20)**](#default_destination_concurrency_limit)

The default maximal number of parallel deliveries to the same destination.

[**transport\_destination\_concurrency\_limit ($default\_destination\_concurrency\_limit)**](#transport_destination_concurrency_limit)

A transport-specific override for the default\_destination\_concurrency\_limit parameter value, where *transport* is the master.cf name of the message delivery transport.

Available in Postfix version 2.5 and later:

[**transport\_initial\_destination\_concurrency ($initial\_destination\_concurrency)**](#transport_initial_destination_concurrency)

A transport-specific override for the initial\_destination\_concurrency parameter value, where *transport* is the master.cf name of the message delivery transport.

[**default\_destination\_concurrency\_failed\_cohort\_limit (1)**](#default_destination_concurrency_failed_cohort_limit)

How many pseudo-cohorts must suffer connection or handshake failure before a specific destination is considered unavailable (and further delivery is suspended).

[**transport\_destination\_concurrency\_failed\_cohort\_limit ($default\_destination\_concurrency\_failed\_cohort\_limit)**](#transport_destination_concurrency_failed_cohort_limit)

A transport-specific override for the default\_destination\_concurrency\_failed\_cohort\_limit parameter value, where *transport* is the master.cf name of the message delivery transport.

[**default\_destination\_concurrency\_negative\_feedback (1)**](#default_destination_concurrency_negative_feedback)

The per-destination amount of delivery concurrency negative feedback, after a delivery completes with a connection or handshake failure.

[**transport\_destination\_concurrency\_negative\_feedback ($default\_destination\_concurrency\_negative\_feedback)**](#transport_destination_concurrency_negative_feedback)

A transport-specific override for the default\_destination\_concurrency\_negative\_feedback parameter value, where *transport* is the master.cf name of the message delivery transport.

[**default\_destination\_concurrency\_positive\_feedback (1)**](#default_destination_concurrency_positive_feedback)

The per-destination amount of delivery concurrency positive feedback, after a delivery completes without connection or handshake failure.

[**transport\_destination\_concurrency\_positive\_feedback ($default\_destination\_concurrency\_positive\_feedback)**](#transport_destination_concurrency_positive_feedback)

A transport-specific override for the default\_destination\_concurrency\_positive\_feedback parameter value, where *transport* is the master.cf name of the message delivery transport.

[**destination\_concurrency\_feedback\_debug (no)**](#destination_concurrency_feedback_debug)

Make the queue manager's feedback algorithm verbose for performance analysis purposes.

# [RECIPIENT SCHEDULING CONTROLS](#RECIPIENT_SCHEDULING_CONTROLS)

```

```

[**default\_destination\_recipient\_limit (50)**](#default_destination_recipient_limit)

The default maximal number of recipients per message delivery.

[**transport\_destination\_recipient\_limit ($default\_destination\_recipient\_limit)**](#transport_destination_recipient_limit)

A transport-specific override for the default\_destination\_recipient\_limit parameter value, where *transport* is the master.cf name of the message delivery transport.

# [MESSAGE SCHEDULING CONTROLS](#MESSAGE_SCHEDULING_CONTROLS)

```

```

[**default\_delivery\_slot\_cost (5)**](#default_delivery_slot_cost)

How often the Postfix queue manager's scheduler is allowed to preempt delivery of one message with another.

[**transport\_delivery\_slot\_cost ($default\_delivery\_slot\_cost)**](#transport_delivery_slot_cost)

A transport-specific override for the default\_delivery\_slot\_cost parameter value, where *transport* is the master.cf name of the message delivery transport.

[**default\_minimum\_delivery\_slots (3)**](#default_minimum_delivery_slots)

How many recipients a message must have in order to invoke the Postfix queue manager's scheduling algorithm at all.

[**transport\_minimum\_delivery\_slots ($default\_minimum\_delivery\_slots)**](#transport_minimum_delivery_slots)

A transport-specific override for the default\_minimum\_delivery\_slots parameter value, where *transport* is the master.cf name of the message delivery transport.

[**default\_delivery\_slot\_discount (50)**](#default_delivery_slot_discount)

The default value for transport-specific \_delivery\_slot\_discount settings.

[**transport\_delivery\_slot\_discount ($default\_delivery\_slot\_discount)**](#transport_delivery_slot_discount)

A transport-specific override for the default\_delivery\_slot\_discount parameter value, where *transport* is the master.cf name of the message delivery transport.

[**default\_delivery\_slot\_loan (3)**](#default_delivery_slot_loan)

The default value for transport-specific \_delivery\_slot\_loan settings.

[**transport\_delivery\_slot\_loan ($default\_delivery\_slot\_loan)**](#transport_delivery_slot_loan)

A transport-specific override for the default\_delivery\_slot\_loan parameter value, where *transport* is the master.cf name of the message delivery transport.

# [OTHER RESOURCE AND RATE CONTROLS](#OTHER_RESOURCE_AND_RATE_CONTROLS)

```

```

[**minimal\_backoff\_time (300s)**](#minimal_backoff_time)

The minimal time between attempts to deliver a deferred message; prior to Postfix 2.4 the default value was 1000s.

[**maximal\_backoff\_time (4000s)**](#maximal_backoff_time)

The maximal time between attempts to deliver a deferred message.

[**maximal\_queue\_lifetime (5d)**](#maximal_queue_lifetime)

Consider a message as undeliverable, when delivery fails with a temporary error, and the time in the queue has reached the maximal\_queue\_lifetime limit.

[**queue\_run\_delay (300s)**](#queue_run_delay)

The time between deferred queue scans by the queue manager; prior to Postfix 2.4 the default value was 1000s.

[**transport\_retry\_time (60s)**](#transport_retry_time)

The time between attempts by the Postfix queue manager to contact a malfunctioning message delivery transport.

Available in Postfix version 2.1 and later:

[**bounce\_queue\_lifetime (5d)**](#bounce_queue_lifetime)

Consider a bounce message as undeliverable, when delivery fails with a temporary error, and the time in the queue has reached the bounce\_queue\_lifetime limit.

Available in Postfix version 2.5 and later:

[**default\_destination\_rate\_delay (0s)**](#default_destination_rate_delay)

The default amount of delay that is inserted between individual message deliveries to the same destination and over the same message delivery transport.

[**transport\_destination\_rate\_delay ($default\_destination\_rate\_delay)**](#transport_destination_rate_delay)

A transport-specific override for the default\_destination\_rate\_delay parameter value, where *transport* is the master.cf name of the message delivery transport.

Available in Postfix version 3.1 and later:

[**default\_transport\_rate\_delay (0s)**](#default_transport_rate_delay)

The default amount of delay that is inserted between individual message deliveries over the same message delivery transport, regardless of destination.

[**transport\_transport\_rate\_delay ($default\_transport\_rate\_delay)**](#transport_transport_rate_delay)

A transport-specific override for the default\_transport\_rate\_delay parameter value, where the initial *transport* in the parameter name is the master.cf name of the message delivery transport.

# [SAFETY CONTROLS](#SAFETY_CONTROLS)

```

```

[**qmgr\_daemon\_timeout (1000s)**](#qmgr_daemon_timeout)

How much time a Postfix queue manager process may take to handle a request before it is terminated by a built-in watchdog timer.

[**qmgr\_ipc\_timeout (60s)**](#qmgr_ipc_timeout)

The time limit for the queue manager to send or receive information over an internal communication channel.

Available in Postfix version 3.1 and later:

[**address\_verify\_pending\_request\_limit (see 'postconf -d' output)**](#address_verify_pending_request_limit)

A safety limit that prevents address verification requests from overwhelming the Postfix queue.

# [MISCELLANEOUS CONTROLS](#MISCELLANEOUS_CONTROLS)

```

```

[**config\_directory (see 'postconf -d' output)**](#config_directory)

The default location of the Postfix main.cf and master.cf configuration files.

[**defer\_transports (empty)**](#defer_transports)

The names of message delivery transports that should not deliver mail unless someone issues "**sendmail -q**" or equivalent.

[**delay\_logging\_resolution\_limit (2)**](#delay_logging_resolution_limit)

The maximal number of digits after the decimal point when logging delay values.

[**helpful\_warnings (yes)**](#helpful_warnings)

Log warnings about problematic configuration settings, and provide helpful suggestions.

[**process\_id (read-only)**](#process_id)

The process ID of a Postfix command or daemon process.

[**process\_name (read-only)**](#process_name)

The process name of a Postfix command or daemon process.

[**queue\_directory (see 'postconf -d' output)**](#queue_directory)

The location of the Postfix top-level queue directory.

[**syslog\_facility (mail)**](#syslog_facility)

The syslog facility of Postfix logging.

[**syslog\_name (see 'postconf -d' output)**](#syslog_name)

A prefix that is prepended to the process name in syslog records, so that, for example, "smtpd" becomes "prefix/smtpd".

Available in Postfix version 3.0 and later:

[**confirm\_delay\_cleared (no)**](#confirm_delay_cleared)

After sending a "your message is delayed" notification, inform the sender when the delay clears up.

Available in Postfix 3.3 and later:

[**service\_name (read-only)**](#service_name)

The master.cf service name of a Postfix daemon process.

Available in Postfix 3.5 and later:

[**info\_log\_address\_format (external)**](#info_log_address_format)

The email address form that will be used in non-debug logging (info, warning, etc.).

# [FILES](#FILES)

```
/var/spool/postfix/incoming, incoming queue
/var/spool/postfix/active, active queue
/var/spool/postfix/deferred, deferred queue
/var/spool/postfix/bounce, non-delivery status
/var/spool/postfix/defer, non-delivery status
/var/spool/postfix/trace, delivery status
```

# [SEE ALSO](#SEE_ALSO)

```
trivial-rewrite(8), address routing
bounce(8), delivery status reports
postconf(5), configuration parameters
master(5), generic daemon options
master(8), process manager
postlogd(8), Postfix logging
syslogd(8), system logging
```

# [README FILES](#README_FILES)

```

```

Use "**postconf readme\_directory**" or "**postconf html\_directory**" to locate this information.

```
SCHEDULER_README, scheduling algorithm
QSHAPE_README, Postfix queue analysis
```

# [LICENSE](#LICENSE)

```

```

The Secure Mailer license must be distributed with this software.

# [AUTHOR(S)](#AUTHOR%28S%29)

```
Wietse Venema
IBM T.J. Watson Research
P.O. Box 704
Yorktown Heights, NY 10598, USA
Preemptive scheduler enhancements:
Patrik Rak
Modra 6
155 00, Prague, Czech Republic
Wietse Venema
Google, Inc.
111 8th Avenue
New York, NY 10011, USA
```

---

Document: qmgr(8) from postfix 3.11.7-r1 (Chainguard OS)
Source: https://github.com/vdukhovni/postfix
