mail(1) mail(1)
NAME
mail, rmail - read mail or send mail to users
SYNOPSIS
Sending mail:
mail [-Mtw] [-m message_type] recipient . . .
rmail [-tw] [-m message_type] [-r originator] recipient . . .
Reading mail:
mail [-ehpPqr] [-f file]
Forwarding mail:
mail -F recipient . . .
Debugging:
mail [-d] [-#] [-xdebug_level] [other_mail_options] [recipient . . .]
mail -T mailsurr_file recipient . . .
mail -R mailR_rewrite_file recipient . . .
DESCRIPTION
A recipient is usually a user name recognized by login(1).
When recipient is specified, 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 (CTRL-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 (/var/mail/user) 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
followed by one or more standardized message header lines.
The first UNIX postmark has the form:
From sender date_and_time [remote from remote_system_name]
Any subsequent UNIX postmarks have the form:
>From sender date_and_time [remote from remote_system_name]
Some older UNIX Systems may also generate postmarks of the
form:
>From sender date_and_time [forwarded by user_name]
Copyright 1994 Novell, Inc. Page 1
mail(1) mail(1)
The standardized message header lines have the form:
keyword-name: [printable text]
where keyword-name is comprised of any printable, non-
whitespace, characters other than colon (`:'). If there is
text after the keyword-name, the colon must be followed by
whitespace. 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.
mail processes supplementary code set characters according to
the locale specified in the LC_CTYPE and LANG environment
variables [see LANG on environ(5)].
The return address for a mail message is constructed by
concatenating all of the remote_system_names found in the UNIX
postmarks, top to bottom and separated with exclamation
points, and then concatenating the sender found on the last
UNIX postmark.
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.
-r originator
Used only with rmail, this option sets the sender
of the mail. It overrides the pid. -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 recipient without
waiting for the completion of the delivery.
-M causes mail to act as if it had been invoked as
rmail.
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. The return address used will be the
first domain-style address found on the Sender: or Errors-to:
headers. If no domain-style addresses are found, the return
path generated from the UNIX postmark headers will be used.
Copyright 1994 Novell, Inc. Page 2
mail(1) mail(1)
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 invoke rmail rather than mail for message
transport and/or delivery. rmail permits a mail message to
begin with UNIX postmarks; mail does not. Both rmail and mail
prefix a new UNIX postmark indicating the user who ran the
command, as determined by the effective user ID.
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.)
When sending mail, delivery is controlled by the
/etc/mail/mailsurr file, and the form of the delivered mail is
controlled by the /etc/mail/rewrite file. Both of these files
may be administered by the local system administrator.
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.
Copyright 1994 Novell, Inc. Page 3
mail(1) mail(1)
-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 $HOME/mbox) instead of
the default mailfile.
mail prints a user's mail messages in last-in, first-out order
unless the -r option is specified. 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 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.)
If the mail message is in Multi-Purpose Internet Message
Extensions (MIME) format and contains something other than a
text message, or contains text in character set other than
that associated with your current locale, the message will be
piped to the metamail program for parsing. (If the
environment variable $NOMETAMAIL is set, metamail will not be
invoked.) The character set associated with your current
locale may be overridden by using the $MM_CHARSET environment
variable.
Only one invocation of mail is permitted to modify the mailbox
at a time; other invocations are permitted to read the mail
but will not update the mailbox.
Copyright 1994 Novell, Inc. Page 4
mail(1) mail(1)
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 persons (yourself is default).
M persons Send mail to the named persons (yourself
is default), attaching a copy of the
current message, then delete the current
message.
n Print message number n.
Copyright 1994 Novell, Inc. Page 5
mail(1) mail(1)
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 CTRL-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. The return
address used will be the first domain-
style address found on the Reply-to:,
From: or Sender: headers. If no domain-
style addresses are found, the return
path generated from the UNIX postmark
headers will be used.
R [users] Reply to the sender, and other user(s),
attaching a copy of the current message,
then delete the message. The return
address used will be the first domain-
style address found on the Reply-to:,
From: or Sender: headers. If no domain-
style addresses are found, the return
path generated from the UNIX postmark
headers will be used.
s [files] Save message in the named file(s)
($HOME/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 ($HOME/mbox is
default) and delete the message.
x Put all mail back in the mailfile
unchanged and exit mail.
Copyright 1994 Novell, Inc. Page 6
mail(1) mail(1)
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 DEL_EMPTY_MAILFILE 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 -F option causes the file /var/mail/:forward/user 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 of 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
Copyright 1994 Novell, Inc. Page 7
mail(1) mail(1)
To forward to more than one recipient enter:
mail -F 'user1, user2@xyz.com, systemc!systemd!user3'
Note that when more than one recipient is specified, the
entire list should be enclosed in 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/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, double quotes should be used to have
strings with embedded whitespace be considered as single
arguments to the command being executed. Backslashes (\) may
be used to escape a double quote from being treated as such.
No shell syntax or metacharacters may be used unless the
command specified is /usr/bin/sh. For example,
mail -F '|/usr/bin/sh -c "shell_command_line"'
The user's mail box is locked while the personal surrogate is
being executed, thus guaranteeing that only one personal
surrogate command can execute at a time. It also means that
any attempts to send mail to the user within the personal
surrogate will fail.
Certain %keyletters are allowed within the piped-to command
specification and will be textually substituted (surrounded by
quotation marks) before the command line is executed.
%R Return path to the message originator.
Copyright 1994 Novell, Inc. Page 8
mail(1) mail(1)
%c Value of the Content-Type: header line if present.
%S Value of the Subject: header line if present.
Because of the quotation marks surrounding the substituted
strings, care must be used when invoking commands which also
use quotation marks. From the previous example, to get a %S
passed as part of the single string to the shell, the quoted
string must be ended before the %S, which includes its own
quotation marks, and will be concatenated to the previous
string:
mail -F '|/usr/bin/sh -c "shell_command_line "%S'
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'
If the first two characters of any forwarded-to recipient name
are `>|', the remainder of the line will be interpreted as a
personal surrogate, just as above, but the mail message will
additionally be appended to the user's mailfile and the exit
value from the program will be ignored. This is known as a
Post-processed Personal Surrogate.
It is possible to control exactly how mail will treat
different exit codes from the personal surrogate command.
Following the | may be placed an exit code specification list
which determines which exit codes are to be treated as
indicating successful message delivery, which exit codes are
to be treated as failed message delivery, and which exit codes
are to indicate that mail should continue on and append the
message to the user's mailfile. An exit code specification
looks like S=ec;C=ec;F=ec;. In each case, ec is a list of
numbers or ranges of numbers, separated by commas, or the wild
card *. For example, the personal surrogate | S=1-
5,99;C=0,12;F=*; mysurrogate %R will run the command, treating
exit codes of 1 through 5 and 99 as a successful message
delivery, exit codes of 0 and 12 as indicating continuing with
local delivery, and all other exit codes indicating a failed
message delivery.
If no exit code specification is given, the default for | is
S=0;F=*; and the default for >| is C=*;.
Copyright 1994 Novell, Inc. Page 9
mail(1) mail(1)
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 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:
-d recipients . . .
-# recipients . . .
The -d and -# options provide a trace, causing mail to display
how a recipient name will be handled when delivering mail.
The -d option shows how the mail to each mail recipient is
treated, reflecting all address translations, while sending
mail. The -# option does not send mail, but reports instead
how the mail would be sent: the sender, the next machine to
handle the mail, and the recipient's address relative to that
machine. The report reflects address translation but does not
follow any forwarded mail addresses.
-T mailsurr_file causes mail to display how it will parse
and interpret the mailsurr file.
-x debug_level causes mail to create a trace file
containing debugging information.
-R mailR_rewrite_file causes mail to use a different file for
commands on how to rewrite headers.
Copyright 1994 Novell, Inc. Page 10
mail(1) mail(1)
The -T option requires an argument that will be taken as the
pathname of a test mailsurr file. If empty (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 CTRL-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.
The -R option requires an argument that will be taken as the
pathname of a test rewrite file written in the mailR language.
This file will be used instead of the default
/etc/mail/rewrite file.
Delivery Notification
Several forms of notification are available for mail by
including one of the following lines in the message header.
Default-Options: [/options]
Transport-Options: [/options]
>To: recipient [/options]
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.
Copyright 1994 Novell, Inc. Page 11
mail(1) mail(1)
/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. The >To: options have precedence over
the Transport-Options: options, which in turn have precedence
over the Default-Options: options. The default for mail
coming from the user IDs postmaster, mailer-daemon, mailer-
demon, uucp and mmdf is /nodeliver/ignore.
$HOME/mbox
The default file for saving mail is $HOME/mbox. If $HOME/mbox
is a directory, then the file $HOME/mbox/mbox will be used
instead.
FILES
dead.letter unmailable text
/etc/passwd to identify sender and locate recipients
/etc/mail/mailsurr
routing and name translation information
/etc/mail/rewrite
mail header rewriting functions
/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/:forward
directory for holding mail forwarding
information.
Copyright 1994 Novell, Inc. Page 12
mail(1) mail(1)
/var/mail/:readlocks
directory for locks while reading mail.
/var/mail/user incoming mail for user; that is, the mailfile
/usr/lib/locale/locale/LC_MESSAGES/uxemail
language-specific message file [See LANG on
environ(5).]
REFERENCES
chmod(1), login(1), mailcap(4), mailcheck(1), mailcnfg(4),
mail_pipe(1M), mailR(5), mailsurr(4), mailx(1), metamail(1),
notify(1), vacation(1), write(1)
NOTICES
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!usera 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 u+s is
performed on the forwarding file whenever forwarding is
activated via the -F option. If the setUID 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.
Copyright 1994 Novell, Inc. Page 13