---
name: "dot-forward"
section: "1qmail"
platform: "linux"
package: "dot-forward"
version: "1:0.71-8"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/dot-forward/1qmail"
---

# dot-forward(1qmail)

read a .forward file under qmail

## NAME

dot-forward - read a .forward file under qmail

## SYNOPSIS

in **~/.qmail**: **\| dot-forward** \[ **-nN** \] *file ...*

## OVERVIEW

**dot-forward** forwards incoming messages according to sendmail-style instructions in *file*, if *file* exists. Normally *file* is **.forward**.

**WARNING:** If you create a **.qmail** file to enable **dot-forward**, make sure to add a second line specifying delivery to your normal mailbox. For example:

```
   |dot-forward .forward
   ./Mailbox
```

**COMPATIBILITY WARNING:** **dot-forward** does not support **:include:** or mbox deliveries. You can use the delivery mechanism described in [**dot-qmail**(5)](/dot-qmail/5.md) instead.

## OPTIONS

- **-N**

  (Default.) Read and forward a message.

- **-n**

  Parse *file* and print the forwarding instructions in it, one per line; do not follow the instructions. You can use this option from the command line to see how your **.forward** file will be interpreted:

  ```
     dot-forward -n .forward
  ```

## FILE HANDLING

When a message arrives, **dot-forward** opens *file* and handles it as discussed below. It exits 99, so **qmail-local** will ignore further instructions in **.qmail**. Exception: If *file* specifies delivery directly to you, **dot-forward** exits 0, so **qmail-local** will read further instructions in **.qmail**.

If *file* does not exist, **dot-forward** exits 0. You can list several *file*s; then **dot-forward** will try each one in turn, using the first one that exists, or exiting 0 if none exist.

**COMPATIBILITY WARNING:** **dot-forward** treats an empty *file* as if it did not exist. Versions of sendmail before V8 would throw away the incoming message.

**COMPATIBILITY WARNING:** If **dot-forward** encounters a temporary error opening *file*, it exits 111, so that **qmail-local** will try again later. sendmail assumes incorrectly that *file* does not exist.

**COMPATIBILITY WARNING:** *file* must be readable by **dot-forward**, which is normally running as the user. sendmail places different constraints on its **.forward** permissions, since it is normally running as root.

## FORWARDING

Normally *file* contains an address. **dot-forward** forwards the message to that address.

The address is parsed as if it were in an RFC 822 message header. Parenthesized comments and bracketed addresses are permitted:

```
   bob (Bob, the postmaster) @heaven.af.mil
```

Addresses with special characters must be quoted:

```
   "spaced out mailbox"@heaven.af.mil
```

Address groups are not permitted.

*file* can contain any number of lines, each line containing any number of addresses. **dot-forward** forwards the message to each address:

```
   bob, fred, susan
   Joe Shmoe <shmoe@heaven.af.mil>
```

An address without a fully qualified domain name is handled as described in [**qmail-header**(5)](/qmail-header/5.md). Exception: Certain addresses without domain names are handled specially, as described below.

## DIRECT DELIVERY

If an address does not contain a domain name, and matches the environment variable **$USER** (without regard to case), it specifies delivery directly to you.

If an address matches **$USER@$HOST** (without regard to case), it specifies delivery directly to you.

**COMPATIBILITY WARNING:** sendmail's handling of quotes and backslashes violates RFC 821 and RFC 822, and is not supported by **dot-forward**. **dot-forward** treats **\\joe** the same way as **joe**. The **dot-qmail** delivery mechanism lets each user manage several addresses, so there is no need for a special syntax to get around forwarding.

## COMMANDS

If an address does not contain a domain name, and begins with a vertical bar, **dot-forward** takes the rest of the address as a command to run:

```
   bob, "|vacation bob"
```

**dot-forward** feeds the message to the command, preceded by the environment variables **$UFLINE**, **$RPLINE**, and **$DTLINE**.

**COMPATIBILITY WARNING:** Internet addresses can legitimately start with a slash or vertical bar. **dot-forward** treats anything with an unquoted @ as an address. sendmail appears to have various problems coping with these addresses, and with commands that contain @ signs.

## COMMENTS

Any line in *file* that begins with # is ignored:

```
   # this is a comment
```

**COMPATIBILITY WARNING:** Versions of sendmail before V8 did not allow comments in **.forward** files.

## VERSION

This is **dot-forward** 0.71. The **dot-forward** home page is **http://pobox.com/~djb/dot-forward.html**.

## SEE ALSO

[qmail-header(5)](/qmail-header/5.md), [dot-qmail(5)](/dot-qmail/5.md)
