mail(1) USER COMMANDS mail(1)
NAME
mail, rmail - read mail or send mail to users
SYNOPSIS
Sending mail:
mail [ -tw ] [ -m message_type ] recipient . . .
rmail [ -tw ] [ -m message_type ] recipient . . .
Reading mail:
mail [ -ehpPqr ] [ -f file ]
Forwarding mail:
mail -F recipient . . .
Debugging:
mail [ -xdebug_level ] [ other_mail_options ] recipient . .
.
mail -T mailsurr_file recipient . . .
DESCRIPTION
A recipient is usually a user name recognized by login(1).
When recipients are named, mail assumes a message is being
sent (except in the case of the -F option). It reads from
the standard input up to an end-of-file (cntrl-d) or, if
reading from a terminal device, until it reads a line con-
sisting of just a period. When either of those indicators is
received, mail adds the letter to the mailfile for each
recipient.
A letter is composed of some header lines followed by a
blank line followed by the message content. The header
lines section of the letter consists of one or more UNIX
postmarks:
From sender date_and_time [remote from
remote_system_name]
followed by one or more standardized message header lines of
the form:
keyword-name: [printable text]
where keyword-name is comprised of any printable, non-
whitespace, characters other than colon (`:'). A Content-
Length: header line, indicating the number of bytes in the
message content will always be present. A Content-Type:
header line that describes the type of the message content
(such as text, binary, multipart, etc.) will always be
present unless the letter consists of only header lines with
no message content. Header lines may be contined on the
following line if that line starts with white space.
Sending mail:
1
mail(1) USER COMMANDS mail(1)
The following command-line arguments affect SENDING mail:
-m causes a Message-Type: line to be added to the message
header with the value of message_type.
-t causes a To: line to be added to the message header for
each of the intended recipients.
-w causes a letter to be sent to a remote recipient
without waiting for the completion of the remote
transfer program.
If a letter is found to be undeliverable, it is returned to
the sender with diagnostics that indicate the location and
nature of the failure. If mail is interrupted during input,
the message is saved in the file dead.letter to allow edit-
ing and resending. dead.letter is always appended to, thus
preserving any previous contents. The initial attempt to
append to (or create) dead.letter will be in the current
directory. If this fails, dead.letter will be appended to
(or created in) the user's login directory. If the second
attempt also fails, no dead.letter processing will be done.
rmail only permits the sending of mail; uucp(1C) uses rmail
as a security precaution. Any application programs that
generate mail messages should be sure to invoke rmail rather
than mail for message transport and/or delivery.
If the local system has the Basic Networking Utilities
installed, mail may be sent to a recipient on a remote sys-
tem. There are numerous ways to address mail to recipients
on remote systems depending on the transport mechanisms
available to the local system. The two most prevalent
addressing schemes are UUCP-style and Domain-style. With
UUCP-style addressing, remote recipients are specified by
prefixing the recipient name with the remote system name and
an exclamation point (such as sysa!user). A series of sys-
tem names separated by exclamation points can be used to
direct a letter through an extended network (such as
sysa!sysb!sysc!user). With Domain-style addressing, remote
recipients are specified by appending an `@' and domain (and
possibly sub-domain) information to the recipient name (such
as user@sf.att.com). (The local System Administrator should
be consulted for details on which addressing conventions are
available on the local system.)
Reading Mail:
The following command-line arguments affect READING mail:
-e causes mail not to be printed. An exit value of 0 is
returned if the user has mail; otherwise, an exit value
of 1 is returned.
-h causes a window of headers to be initially displayed
rather than the latest message. The display is fol-
lowed by the `?' prompt.
-p causes all messages to be printed without prompting for
2
mail(1) USER COMMANDS mail(1)
disposition.
-P causes all messages to be printed with all header lines
displayed, rather than the default selective header
line display.
-q causes mail to terminate after interrupts. Normally an
interrupt causes only the termination of the message
being printed.
-r causes messages to be printed in first-in, first-out
order.
-f file
causes mail to use file (such as mbox) instead of the
default mailfile.
mail, unless otherwise influenced by command-line arguments,
prints a user's mail messages in last-in, first-out order.
The default mode for printing messages is to display only
those header lines of immediate interest. These include,
but are not limited to, the UNIX From and >From postmarks,
From:, Date:, Subject:, and Content-Length: header lines,
and any recipient header lines such as To:, Cc:, Bcc:, etc.
After the header lines have been displayed, mail will
display the contents (body) of the message only if it con-
tains no unprintable characters. Otherwise, mail will issue
a warning statement about the message having binary content
and not display the content. (This may be overridden via
the p command. See below.)
For each message, the user is prompted with a ?, and a line
is read from the standard input. The following commands are
available to determine the disposition of the message:
# Print the number of the current mes-
sage.
- Print previous message.
<new-line>, +, or n Print the next message.
!command Escape to the shell to do command.
a Print message that arrived during the
mail session.
d, or dp Delete the current message and print
the next message.
d n Delete message number n. Do not go on
to next message.
dq Delete message and quit mail.
h Display a window of headers around
3
mail(1) USER COMMANDS mail(1)
current message.
h n Display a window of headers around mes-
sage number n.
h a Display headers of all messages in the
user's mailfile.
h d Display headers of messages scheduled
for deletion.
m [ persons ] Mail (and delete) the current message
to the named person(s).
n Print message number n.
p Print current message again, overriding
any indications of binary (that is,
unprintable) content.
P Override default brief mode and print
current message again, displaying all
header lines.
q, or cntrl-D Put undeleted mail back in the mailfile
and quit mail.
r [ users ] Reply to the sender, and other user(s),
then delete the message.
s [ files ] Save message in the named file(s) (mbox
is default) and delete the message.
u [ n ] Undelete message number n (default is
last read).
w [ files ] Save message contents, without any
header lines, in the named files (mbox
is default) and delete the message.
x Put all mail back in the mailfile
unchanged and exit mail.
y [ files ] Same as save.
? Print a command summary.
When a user logs in, the presence of mail, if any, is usu-
ally indicated. Also, notification is made if new mail
arrives while using mail.
4
mail(1) USER COMMANDS mail(1)
The permissions of mailfile may be manipulated using chmod
in two ways to alter the function of mail. The other per-
missions of the file may be read-write (0666), read-only
(0664), or neither read nor write (0660) to allow different
levels of privacy. If changed to other than the default
(mode 0660), the file will be preserved even when empty to
perpetuate the desired permissions. (The administrator may
override this file preservation using the DELEMPTYMAILFILE
option of mailcnfg.) The group id of the mailfile must be
mail to allow new messages to be delivered, and the mailfile
must be writable by group mail.
Forwarding mail:
The following command-line argument affects FORWARDING of
mail:
-F recipients
Causes all incoming mail to be forwarded to recipients.
The mailbox must be empty.
The -F option causes the mailfile to contain a first line
of:
Forward to recipient. . .
Thereafter, all mail sent to the owner of the mailfile will
be forwarded to each recipient.
An Auto-Forwarded-From: ... line will be added to the for-
warded message's header. This is especially useful in a
multi-machine environment to forward all a person's mail to
a single machine, and to keep the recipient informed if the
mail has been forwarded.
Installation and removal of forwarding is done with the -F
invocation option. To forward all your mail to systema!user
enter:
mail -F systema!user
To forward to more than one recipient enter:
mail -F "user1,user2@att.com,systemc!systemd!user3"
Note that when more than one recipient is specified, the
entire list should be enclosed in double quotes so that it
may all be interpreted as the operand of the -F option. The
list can be up to 1024 bytes; either commas or white space
can be used to separate users.
If the first character of any forwarded-to recipient name is
the pipe symbol (`|'), the remainder of the line will be
interpreted as a command to pipe the current mail message
to. The command, known as a Personal Surrogate, will be exe-
cuted in the environment of the recipient of the message
(that is, basename of the mailfile). For example, if the
mailfile is /var/mail/foo, foo will be looked up in
5
mail(1) USER COMMANDS mail(1)
/etc/passwd to determine the correct userID, groupID, and
HOME directory. The command's environment will be set to
contain only HOME, LOGNAME, TZ, PATH (= /usr/usr/bin:), and
SHELL (= /usr/bin/sh), and the command will execute in the
recipient's HOME directory. If the message recipient cannot
be found in /etc/passwd, the command will not be executed
and a non-delivery notification with appropriate diagnostics
will be sent to the message's originator.
After the pipe symbol, escaped double quotes should be used
to have strings with embedded whitespace be considered as
single arguments to the command being executed. No shell
syntax or metacharacters may be used unless the command
specified is /usr/bin/sh. For example,
mail -F "|/bin/sh -c \"shellcommandline\""
will work, but is not advised since using double quotes and
backslashes within the shell_command_line is difficult to do
correctly and becomes tedious very quickly.
Certain %keywords are allowed within the piped-to command
specification and will be textually substituted for before
the command line is executed.
%R Return path to the message originator.
%c Value of the Content-Type: header line if present.
%S Value of the Subject: header line if present.
If the command being piped to exits with any non-zero value,
mail will assume that message delivery failed and will gen-
erate a non-delivery notification to the message's origina-
tor. It is allowable to forward mail to other recipients and
pipe it to a command, as in
mail -F "carol,joe,|myvacationprog %R"
Two UNIX System facilities that use the forwarding of mes-
sages to commands are notify(1), which causes asynchronous
notification of new mail, and vacation(1), which provides an
auto-answer capability for messages when the recipient will
be unavailable for an extended period of time.
To remove forwarding enter:
mail -F ""
The pair of double quotes is mandatory to set a NULL argu-
ment for the -F option.
In order for forwarding to work properly the mailfile should
have mail as group ID, and the group permission should be
read-write.
mail will exit with a return code of 0 if forwarding was
successfully installed or removed.
6
mail(1) USER COMMANDS mail(1)
Debugging:
The following command-line arguments cause mail to provide
DEBUGGING information:
-T mailsurr_file causes mail to display how it will
parse and interpret the mailsurr file.
-xdebug_level causes mail to create a trace file
containing debugging information.
The -T option requires an argument that will be taken as the
pathname of a test mailsurr file. If NULL (as in -T ""),
the system mailsurr file will be used. To use, type 'mail
-T test_file recipient' and some trivial message (like
"testing"), followed by a line with either just a dot (`.')
or a cntrl-D. The result of using the -T option will be
displayed on standard output and show the inputs and result-
ing transformations as mailsurr is processed by the mail
command for the indicated recipient. Mail messages will
never actually be sent or delivered when the -T option is
used.
The -x option causes mail to create a file named
/tmp/MLDBGprocess_id that contains debugging information
relating to how mail processed the current message. The
absolute value of debug_level controls the verboseness of
the debug information. Zero implies no debugging. If
debug_level is greater than zero, the debug file will be
retained only if mail encountered some problem while pro-
cessing the message. If debug_level is less than zero the
debug file will always be retained. The debug_level speci-
fied via -x overrides any specification of DEBUG in
/etc/mail/mailcnfg. The information provided by the -x
option is esoteric and is probably only useful to System
Administrators. The output produced by the -x option is a
superset of that provided by the -T option.
Delivery Notification
Several forms of notification are available for mail by
including one of the following lines in the message header.
Transport-Options: [ /options ]
Default-Options: [ /options ]
>To: recipient [ /options ]
Where the ``/options'' may be one or more of the following:
/delivery Inform the sender that the message was success-
fully delivered to the recipient's mailbox.
/nodelivery Do not inform the sender of successful
deliveries.
/ignore Do not inform the sender of unsuccessful
7
mail(1) USER COMMANDS mail(1)
deliveries.
/return Inform the sender if mail delivery fails.
Return the failed message to the sender.
/report Same as /return except that the original message
is not returned.
The default is /nodelivery/return. If contradictory options
are used, the first will be recognized and later, conflict-
ing, terms will be ignored.
FILES
dead.letter unmailable text
/etc/passwd to identify sender and locate recipients
/etc/mail/mailsurr routing / name translation information
/etc/mail/mailcnfg initialization information
$HOME/mbox saved mail
$MAIL variable containing path name of mail-
file
/tmp/ma* temporary file
/tmp/MLDBG* debug trace file
/var/mail/*.lock lock for mail directory
/var/mail/:saved directory for holding temp files to
prevent loss of data in the event of a
system crash.
/var/mail/user incoming mail for user; that is, the
mailfile
SEE ALSO
chmod(1), login(1), mailx(1), notify(1), write(1), vaca-
tion(1)
mailpipe(1M), mailsurr(4), mailcnfg(4) in the System
Administrator's Reference Manual.
User's Guide.
NOTES
The "Forward to recipient" feature may result in a loop.
Local loops (messages sent to usera, which are forwarded to
userb, which are forwarded to usera) will be detected
immediately. Remote loops (mail sent to sys1!usera1 which is
forwarded to sys2!userb, which is forwarded to sys1!usera)
will also be detected, but only after the message has
exceeded the built-in hop count limit of 20. Both cases of
forwarding loops will result in a non-delivery notification
being sent to the message originator.
As a security precaution, the equivalent of a chmod s+g is
performed on the mailfile whenever forwarding is activated
via the -F option, and a chmod s-g is done when forwarding
is removed via the -F option. If the setGID mode bit is not
set when mail attempts to forward an incoming message to a
8
mail(1) USER COMMANDS mail(1)
command, the operation will fail and a non-delivery report
with appropriate diagnostics will be sent to the message's
originator.
The interpretation and resulting action taken because of the
header lines described in the Delivery Notifications section
above will only occur if this version of mail is installed
on the system where the delivery (or failure) happens. Ear-
lier versions of mail may not support any types of delivery
notification.
Conditions sometimes result in a failure to remove a lock
file.
After an interrupt, the next message may not be printed;
printing may be forced by typing a p.
9