mail — Read and send mail messages

Format

Note: The mail utility is fully supported for compatibility with older UNIX systems. However, it is recommended that the mailx utility be used instead because it may provide greater functionality and is considered the standard for portable UNIX applications as defined by POSIX.2 IEEE standard 1003.2-1992.

Description

mail lets you read mail sent to you and sends mail to other users. It has two modes of operation, one for reading mail and one for sending mail. If you start mail without any arguments, it checks for mail to be read and then presents the messages in read mode. If you start it with an argument or arguments, it assumes you are sending a message to the address named as the argument and enters send mode. The text of the message is taken from standard input until mail encounters either EOF or a line consisting of only a single dot (.).

For example, to read mail, enter:
mail
To send a mail message to the users Chris and Lee, enter:
mail chris lee

Options

The –t option is used only when sending mail; the others only when reading mail.
–e
Tests for the existence of mail and exits. If there is mail in the system mailbox, the return status is successful.
–f
Reads mail from file instead of the system mailbox. This option is often used to read mail saved in other files.
–p
Prints all mail to standard output without querying.
–q
Quits the mail session after an interrupt signal; normally, an interrupt ends only the message being written.
–r
Saves messages in first-in, first-out order, the reverse of the default. Normally, the most recently received message is written first.
–t
Lists the recipients at the beginning of the message (default).

Reading mail

When you start mail without arguments, mail checks your system mailbox for mail. If there is no mail, mail exits with a return code of 1; if there is waiting mail, mail displays the first message. (If you specify –p on the command line, it displays all messages.)

Commands within mail control how messages are handled. The following commands are available:
d
Deletes the current message.
m[name…]
Sends the current message to the specified user. If a user is not specified, the mail is sent to you.
p
Prints the message on the screen again.
q
Quits mail, storing any undeleted messages in the file $HOME/mbox.
s[file]
Saves the message in the specified file. If a file is not specified, mail saves the message in mbox in your home directory.
w[file]
Saves the message (same as s), but without header lines.
x
Exits mail without changing the mailbox file.
ENTER (or newline)
Displays the next message.
!command
Runs command using the shell.
+
Displays the next message (same as ENTER or newline).
Displays the previous message.
*
Displays a summary of internal commands.

Because the commands are read from standard input, you can create mail command files and use input redirection to have mail execute them.

Sending mail

To send mail, start mail with a list of addresses as arguments. Enter the text of the message, and end the message with either EOF or with a single dot (.) on a line followed by a <newline>.

The –t option inserts at the beginning of the message a list of the addresses; a path name beginning with a slash (/) is recognized as a valid address (assuming you have the correct permissions).

If the address is not valid or recognized, or if the message is interrupted (see the –q option), mail stores the message in the file dead.letter in the current directory. If it can't create dead.letter in the current directory, it creates the file in your home directory. If dead.letter already exists, the new contents overwrite the old.

The mail program modifies the message text slightly; because lines beginning with From (including the trailing space) are used to separate files in the mailbox, mail changes any lines in the message that begin with From to read >From.

Examples

To send the file how2mail to user Chris, enter:
mail chris < how2mail

Usage notes

  1. Wherever the POSIX standard doesn't define the behavior of mail, this implementation resembles mailx.
  2. mail doesn't require a delivery path or mechanism to the destination, though for most uses, this is preferable.

Environment variables

mail uses the following environment variables:
HOME
Specifies your home directory; used to locate the mbox and dead.letter files.
TZ
Specifies the time zone to be used in date and time strings.

Localization

mail uses the following localization environment variables:
  • LC_CTYPE
  • LC_MESSAGES
  • LC_TIME
  • NLSPATH

See Localization for more information.

The ability of mail to handle double-byte characters (or even 8-bit ASCII depends on the underlying mail transport mechanism. You should restrict all messages to the POSIX portable character set. To send messages containing double-byte characters or even binary files, encode them first with uuencode.

Files

mail uses the following files:
dead.letter
The most recently canceled message.
mbox
The default file for saving read mail, stored in the directory specified by HOME.

Exit values

0
The session was successfully completed; if reading, there was mail.
1
There was no mail, or the session could not be started.
2
An error occurred after starting the session, or you supplied an invalid option, resulting in a usage message.

Portability

POSIX.2

Because this utility is due to be withdrawn from POSIX, you may want to use mailx for portable applications. The ability to write directly to a file is an extension to POSIX.

Limits

Any individual line is limited to LINE_MAX bytes; of course, transport mechanisms between systems may impose shorter limits.

Related information

mailx, uudecode, uuencode

Format of the TZ environment variable also explains how to set the local time zone with the TZ environment variable.