---
name: "mh-alias"
section: "5mh"
platform: "linux"
package: "nmh"
version: "1.8-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/mh-alias/5mh"
---

# mh-alias(5mh)

format of nmh email-address alias files

## NAME

mh-alias - format of nmh email-address alias files

## DESCRIPTION

Each line of an **nmh** alias file takes one of the following forms:

*alias* **:** *address-group*

*alias* **;** *address-group*

**\<** *alias-file*

**;** \| **:** \| **#** *comment*

where:

```
address-group	:= address-list
			|  < file
address-list	:= address
			|  address-list, address
```

Continuation lines end with “\\” followed by a newline character.  This also applies to comment lines.  Thus, the line following a “\\”-terminated comment line is a continuation of that comment line.

*Alias-file* and *file* are Unix file names. Alias file contents are case-insensitive, with the exception of filesystem path names.

If the line starts with a “\<”, the file named after the “\<” is read for more alias definitions.  The reading is done recursively, so a “\<” may occur in the beginning of an alias file with the expected results.

If the *address-group* starts with a “\<”, the file named after the “\<” is read and its contents are added to the *address-list* for the alias.

In match, a trailing “\*” on an alias will match just about anything appropriate.

An approximation of the way aliases are resolved at posting time is:

- 1\)

  Build a list of all addresses from the message to be delivered, eliminating duplicate addresses.

- 2\)

  For those addresses in the message that have no host specified, perform alias resolution.

- 3\)

  For each line in the alias file, compare “alias” against all of the existing addresses.  If a match, remove the matched “alias” from the address list, and add each new address in the address-group to the address list if it is not already on the list.  The alias itself is not usually output, rather the address-group that the alias maps to is output instead.  If “alias” is terminated with a “;” instead of a “:”, then both the “alias” and the address are output in the correct format (with the alias quoted if necessary and the address wrapped in \<\>).

Since the *mh-alias* file is read line by line, forward references work, but backward references are not recognized.

### Example Alias File

```
</etc/nmh/BBoardAliases
sgroup: fred, fear, freida
fred: frated@UCI.example
b-people: Blind List: bill, betty
Unix-committee: <unix.aliases
news.*: news
```

The first line says that more aliases should immediately be read from the file **/etc/nmh/BBoardAliases**. Next, “sgroup” is defined as an alias for three names, and one of them, “fred”, is a forward reference to another alias for “frated@UCI.example”.

The alias “b-people” is a blind list which includes the addresses “bill” and “betty”; the message will be delivered to those addresses, but the message header will show only “Blind List: ;” (not the addresses).  The alias must not be terminated with, or contain, a semicolon. Note that blind lists are not supported with the **sendmail/pipe** mail transport method.

The definition of “Unix-committee” is given by reading the file *unix.aliases* in the user's **nmh** directory.

Lastly, “news.*anything*” is aliased to “news”; the full stop is just another literal character.

## PROFILE COMPONENTS

- Aliasfile:

  Default alias file.

## FILES

- /etc/nmh/MailAliases

  System-wide default alias file.

## SEE ALSO

[*ali*(1)](/ali/1.md), [*send*(1)](/send/1.md), [*whom*(1)](/whom/1.md), [*getgrent*(3)](/getgrent/3.md), [*getpwent*(3)](/getpwent/3.md), [*post*(8)](/post/8.md)

## BUGS

Although the forward-referencing semantics of mh-alias files prevent recursion, the **alias-file** directive may defeat this. Since the number of file descriptors is finite, such infinite recursion will terminate with a meaningless diagnostic when all the fds are used up.

Earlier versions of this man page showed a semicolon at the end of the blind list example.  That caused the preceding alias to not be expanded.  There must not be a semicolon at the end of, or within, the address group of a blind list. **post** will append the semicolon to the blind list name.
