mail(1) UNIX System V(Essential Utilities) 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 consisting 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 continued on the following line if that
line starts with white space.
Sending mail:
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.
10/89 Page 1
mail(1) UNIX System V(Essential Utilities) mail(1)
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 editing 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 system. 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 system 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 followed by the `?' prompt.
-p causes all messages to be printed without prompting for
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
Page 2 10/89
mail(1) UNIX System V(Essential Utilities) mail(1)
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 contains 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 message.
- 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 current message.
h n Display a window of headers around message 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.
10/89 Page 3
mail(1) UNIX System V(Essential Utilities) mail(1)
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 usually indicated.
Also, notification is made if new mail arrives while using mail.
The permissions of mailfile may be manipulated using chmod in two ways to
alter the function of mail. The other permissions 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 forwarded 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.
Page 4 10/89
mail(1) UNIX System V(Essential Utilities) mail(1)
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 executed 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 /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 generate a non-delivery
notification to the message's originator. 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 messages 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
10/89 Page 5
mail(1) UNIX System V(Essential Utilities) mail(1)
time.
To remove forwarding enter:
mail -F ""
The pair of double quotes is mandatory to set a NULL argument 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.
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 resulting
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 processing the message. If
debug_level is less than zero the debug file will always be retained.
The debug_level specified 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 ]
Page 6 10/89
mail(1) UNIX System V(Essential Utilities) mail(1)
Where the ``/options'' may be one or more of the following:
/delivery Inform the sender that the message was successfully delivered
to the recipient's mailbox.
/nodelivery Do not inform the sender of successful deliveries.
/ignore Do not inform the sender of unsuccessful 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, conflicting, 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 mailfile
/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), vacation(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
10/89 Page 7
mail(1) UNIX System V(Essential Utilities) mail(1)
setGID mode bit is not set when mail attempts to forward an incoming
message to a 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. Earlier 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.
Page 8 10/89