MAIL(1) — USER COMMANDS
NAME
Mail − interactive message processing system
SYNOPSIS
Mail [ −d ] [ −e ] [ −f [ filename | +folder ] ] [ −F ] [ −h number ] [ −H ] [ −i ] [ −n ]
[ −N ] [ −r address ] [ −s subject ] [ −T file ] [ −u user ] [ −U ] [ −v ] [ name ... ]
DESCRIPTION
mail provides a comfortable, flexible environment for sending and receiving messages electronically. When reading mail, mail provides commands to facilitate saving, deleting, and responding to messages. When sending mail, mail allows editing, reviewing and other modification of the message as it is entered.
Incoming mail is stored in a standard file for each user, called the system mailbox for that user. When mail is called to read messages, the mailbox is the default place to find them. As messages are read, they are marked to be moved to a secondary file for storage, unless specific action is taken, so that the messages need not be seen again. This secondary file is called the mbox and is normally located in the user’s HOME directory (see ‘MBOX’ (VARIABLES) for a description of this file). Messages remain in this file until forcibly removed.
OPTIONS
On the command line, options start with a dash (−) and any other arguments are taken to be destinations (recipients). If no recipients are specified, mail attempts to read messages from the mailbox. Command line options are:
−d Turn on debugging output. Neither particularly interesting nor recommended.
−e Test for presence of mail. Mail prints nothing and exits with a successful return code if there is mail to read.
−f [filename]
Read messages from filename instead of mailbox. If no filename is specified, the mbox is used.
−f [+folder]"
Use the file folder in the ‘folders’ directory (as with the folder command).
−F Record the message in a file named after the first recipient. Overrides the ‘record’ variable, if set (see VARIABLES).
−h number The number of network ‘hops’ made so far. This is provided for network software to avoid infinite delivery loops.
−H Print header summary only.
−i Ignore interrupts. See also ‘ignore’ (VARIABLES).
−n Do not initialize from the system default Mail.rc file.
−N Do not print initial header summary.
−r address Pass address to network delivery software. All tilde commands are disabled.
−s subject Set the Subject header field to subject.
−T file Print the contents of the article-id fields of all messages that were read or deleted on file (for the use of network news programs if available).
−u user Read user’s mailbox. This is only effective if user’s mailbox is not read protected.
−U Convert uucp style addresses to internet standards. Overrides the ‘conv’ environment variable.
−v Pass the −v flag to sendmail(8).
SENDING MAIL
When sending mail, mail is in input mode. If no subject is specified on the command line, a prompt for the subject is printed. As the message is typed, mail reads the message and stores it in a temporary file. Commands may be entered by beginning a line with the tilde (~) escape character followed by a single command letter and optional arguments. See TILDE ESCAPES for a summary of these commands.
READING MAIL
When reading mail, mail is in command mode. A header summary of the first several messages is displayed, followed by a prompt indicating mail can accept regular commands (see COMMANDS below).
At any time, the behavior of mail is governed by a set of environment variables. These are flags and valued parameters which are set and cleared via the set and unset commands. See VARIABLES below for a summary of these parameters.
Recipients listed on the command line may be of three types: login names, shell commands, or alias groups. Login names may be any network address, including mixed network addressing. If the recipient name begins with a pipe symbol (|), the rest of the name is taken to be a shell command to pipe the message through. This provides an automatic interface with any program that reads the standard input, such as lpr for recording outgoing mail on paper. Alias groups are set by the alias command (see COMMANDS below) and are lists of recipients of any type.
Regular commands are of the form
[ command ] [ msglist ] [ arguments ] If no command is specified in command mode, that is, you just type a carriage-return, print is assumed. In input mode, commands are recognized by the escape character, and lines not treated as commands are taken as input for the message.
Each message is assigned a sequential number, and there is at any time the notion of a ‘current’ message, marked by a ‘>’ in the header summary. Many commands take an optional list of messages (msglist) to operate on, which defaults to the current message. A msglist is a list of message specifications separated by spaces, which may include:
n Message number n. . The current message.
^ The first undeleted message.
$ The last message.
+ The next undeleted message.
− The previous undeleted message.
∗ All messages.
n−m An inclusive range of message numbers.
user All messages from user.
/string All messages with string in the subject line (case ignored).
:c All messages of type c, where c is one of:
d deleted messages
n new messages
o old messages
r read messages
u unread messages
Note that the context of the command determines whether this type of message specification makes sense.
Other arguments are usually arbitrary strings whose usage depends on the command involved. File names, where expected, are expanded via the normal shell conventions (see csh(1) and sh(1)). Special characters are recognized by certain commands and are documented with the commands below.
STARTING MAIL
At start-up time, mail reads commands from a system-wide file (/usr/lib/Mail.rc) to initialize certain parameters, then from a private start-up file ($HOME/.mailrc) for personalized variables. Most regular commands are legal inside start-up files, the most common use being to set up initial display options and alias lists. The following commands are not legal in the start-up file: !, Copy, edit, followup, Followup, hold, mail, preserve, reply, Reply, replyall, replysender, shell, and visual. Any errors in the start-up file cause the remaining lines in the file to be ignored.
COMMANDS
The following is a complete list of mail commands:
!shell-command
Escape to the shell. See ‘SHELL’ (VARIABLES).
# comment Null command (comment). This may be useful in .mailrc files.
= Print the current message number.
? Prints a summary of commands.
alias [alias name ...]
group [alias name ...]
Declare an alias for the given names. The names will be substituted when alias is used as a recipient. Useful in the .mailrc file. With no arguments, alias prints the current list of aliases.
alternates name ...
Declares a list of alternate names for your login. When responding to a message, these names are removed from the list of recipients for the response. With no arguments, alternates prints the current list of alternate names. See also ‘allnet’ (VARIABLES).
cd [directory]
chdir [directory]
Change directory. If directory is not specified, $HOME is used.
copy [filename]
copy [msglist] filename
Copy messages to the file without marking the messages as saved. Otherwise equivalent to the save command.
Copy [msglist] Save the specified messages in a file whose name is derived from the author of the message to be saved, without marking the messages as saved. Otherwise equivalent to the Save command.
delete [msglist]
Delete messages from the mailbox. If ‘autoprint’ is set, the next message after the last one deleted is printed (see VARIABLES).
discard [header-field ...]
ignore [header-field ...]
Suppresses printing of the specified header fields when displaying messages on the screen. Examples of header fields to ignore are ‘status’ and ‘received’. The fields are included when the message is saved unless ‘alwaysignore’ is set (see VARIABLES). The Print and Type commands override any ignoring of header fields and display all header fields.
dp [msglist]
dt [msglist] Delete the specified messages from the mailbox and print the next message after the last one deleted. Roughly equivalent to a delete command followed by a print command.
echo string ... Echo the given strings (like echo).
edit [msglist] Edit the given messages. The messages are placed in a temporary file and the ‘EDITOR’ variable is used to get the name of the editor (see VARIABLES). Default editor is ex.
exit
xit Exit from mail, without changing the mailbox. No messages are saved in the mbox (see also quit).
file [filename]
folder [filename]
Quit from the current file of messages and read in the specified file. Several special characters are recognized when used as file names, with the following substitutions:
% the current mailbox.
%user the mailbox for user.
# the previous file.
& the current mbox.
+folder the file folder in the folders directory.
With no arguments, file prints the name of the current file and the number of messages and characters in that file.
folders Print the names of the files in the directory set by the ‘folder’ variable (see VARIABLES).
followup [message]
Respond to a message, recording the response in a file whose name is derived from the author of the message. Overrides the ‘record’ variable, if set. See also the Followup, Save, and Copy commands and ‘outfolder’ (VARIABLES).
Followup [msglist]
Respond to the first message in the msglist, sending the message to the author of each message in the msglist. The subject line is taken from the first message and the response is recorded in a file whose name is derived from the author of the first message. See also the followup, Save, and Copy commands and ‘outfolder’ (VARIABLES).
from [msglist] Prints the header summary for the specified messages.
group alias name ...
alias alias name ...
Declare an alias for the given names. The names will be substituted when alias is used as a recipient. Useful in the .mailrc file. With no arguments, alias prints the current list of aliases.
headers [message]
Prints the page of headers which includes the message specified. The ‘screen’ variable sets the number of headers per page (see VARIABLES). See also the z command.
help Prints a summary of commands.
hold [msglist]
preserve [msglist]
Holds the specified messages in the mailbox.
if s|r|t
mail-commands
else
mail-commands
endif Conditional execution, where s will execute following mail-commands, up to an else or endif, if the program is in send mode, r executes the mail-commands only in receive mode, and t executes the mail-commands only if mail is being run from a tty. Useful in the .mailrc file.
ignore header-field ...
discard header-field ...
Suppress printing the specified header fields when displaying messages on the screen. Examples of header fields to ignore are ‘status’ and ‘received’. The fields are included when the message is saved unless ‘alwaysignore’ is set (see VARIABLES). The Print and Type commands override any ignoring of header fields and display all header fields.
list Prints all commands available. No explanation is given.
mail name ... Mail a message to the specified users.
mbox [msglist]
Arrange for the given messages to end up in the standard mbox save file when mail terminates normally. See ‘MBOX’ (VARIABLES) for a description of this file. See also the exit and quit commands.
next [message]
Go to next message matching message. A msglist may be specified, but in this case the first valid message in the list is the only one used. This is useful for jumping to the next message from a specific user, since the name would be taken as a command in the absence of a real command. See the discussion of msglists above for a description of possible message specifications.
pipe [msglist] [shell-command]
| [msglist] [shell-command]
Pipe the message through the given shell-command. The message is treated as if it were read. If no arguments are given, the current message is piped through the command specified by the value of the ‘cmd’ variable. If the ‘page’ variable is set, a form feed character is inserted after each message (see VARIABLES).
preserve [msglist]
hold [msglist] Preserve the specified messages in the mailbox.
Print [msglist]
Type [msglist] Print the specified messages on the screen, including all header fields. Overrides suppression of fields by the ignore command.
print [msglist]
type [msglist] Print the specified messages. If ‘crt’ is set, the messages longer than the number of lines specified by the ‘crt’ variable are paged through the command specified by the ‘PAGER’ variable. The default command is more (see VARIABLES).
quit Exit from mail, storing messages that were read in mbox and unread messages in the mailbox. Messages that have been explicitly saved in a file are deleted.
Reply [message]
Respond [message]
replyall [message]
Reply to the specified message, including all other recipients of the message. If ‘record’ is set to a filename, the response is saved at the end of that file (see VARIABLES). If the ‘replyall’ variable is set, the actions of Reply/ Respond and reply/ respond are reversed. The replyall command always has the action described above; it is not affected by the ‘replyall’ variable.
reply [msglist]
respond [msglist]
replysender [msglist]
Send a response to the author of each message in the msglist. The subject line is taken from the first message. If ‘record’ is set to a filename, the response is saved at the end of that file (see VARIABLES). If the ‘replyall’ variable is set, the actions of Reply/ Respond and reply/ respond are reversed. The replysender command always has the action described above; it is not affected by the ‘replyall’ variable.
Save [msglist] Save the specified messages in a file whose name is derived from the author of the first message. The name of the file is taken to be the author’s name with all network addressing stripped off. See also the Copy, followup, and Followup commands and ‘outfolder’ (VARIABLES).
save [filename]
save [msglist] filename
Save the specified messages in the given file. The file is created if it does not exist. The message is deleted from the mailbox when mail terminates unless ‘keepsave’ is set (see also VARIABLES and the exit and quit commands). Default file is the user’s mbox.
set
set name
set name=string
set name=number
Define a variable called name. The variable may be given a null, string, or numeric value. Set by itself prints all defined variables and their values. See VARIABLES for detailed descriptions of the mail variables.
shell Invoke an interactive shell (see also ‘SHELL’ (VARIABLES)).
size [msglist] Print the size in characters of the specified messages.
source filename
Read commands from the given file and return to command mode.
top [msglist] Print the top few lines of the specified messages. If the ‘toplines’ variable is set, it is taken as the number of lines to print (see VARIABLES). The default is 5.
touch [msglist]
Touch the specified messages. If any message in msglist is not specifically saved in a file, it will be placed in the mbox upon normal termination. See exit and quit.
Type [msglist]
Print [msglist] Print the specified messages on the screen, including all header fields. Overrides suppression of fields by the ignore command.
type [msglist]
print [msglist] Print the specified messages. If ‘crt’ is set, the messages longer than the number of lines specified by the ‘crt’ variable are paged through the command specified by the ‘PAGER’ variable. The default command is more (see VARIABLES).
undelete [msglist]
Restore the specified deleted messages. Will only restore messages deleted in the current mail session. If ‘autoprint’ is set, the last message of those restored is printed (see VARIABLES).
unset name ...
Erases the specified variables. If the variable was imported from the execution environment (that is, a shell variable) then it cannot be erased.
version Prints the current version and release date.
visual [msglist]
Edit the given messages with a screen editor. The messages are placed in a temporary file and the ‘VISUAL’ variable is used to get the name of the editor (see VARIABLES). Default screen editor is vi.
write [msglist] filename
Write the given messages on the specified file, minus the header and trailing blank line. Otherwise equivalent to the save command.
xit
exit Exit from mail, without changing the mailbox. No messages are saved in the mbox (see also quit).
z[+|−] Scroll the header display forward or backward one screen−full. The number of headers displayed is set by the ‘screen’ variable (see VARIABLES).
TILDE ESCAPES
The following commands may be entered only from input mode, by beginning a line with the tilde escape character (~). See ‘escape’ (VARIABLES) for changing this special character. The tilde escape character may be entered as text by typing it twice (for example, typing
~~ is the tilde escape character
enters the line
~ is the tilde escape character
into the message).
~! shell-command
Escape to the shell.
~. Simulate end of file (terminate message input).
~: mail-command
~_ mail-command
Perform the command-level request. Valid only when sending a message while reading mail.
~? Print a summary of tilde escapes.
~A Insert the autograph string ‘Sign’ into the message (see VARIABLES).
~a Insert the autograph string ‘sign’ into the message (see VARIABLES).
~b name ... Add the names to the blind carbon copy (Bcc) list.
~c name ... Add the names to the carbon copy (Cc) list.
~d Read in the dead.letter file. See ‘DEAD’ (VARIABLES) for a description of this file.
~e Invoke the editor on the partial message. See also ‘EDITOR’ (VARIABLES).
~f [msglist] Forward the specified messages. The messages are inserted into the message, without alteration, as opposed to the ~m command. Valid only when sending a message while reading mail.
~h Prompt for Subject line and To, Cc, and Bcc lists. If the field is displayed with an initial value, it may be edited as if you had just typed it.
~i string Insert the value of the named variable into the text of the message. For example, ~A is equivalent to ‘~i Sign.’
~m [msglist] Insert the specified messages into the letter, shifting the new text to the right one tab stop. Valid only when sending a message while reading mail.
~p Print the message being entered.
~q Quit from input mode by simulating an interrupt. If the body of the message is not null, the partial message is saved in the dead.letter file. See ‘DEAD’ (VARIABLES) for a description of this file.
~r filename
~< filename
~< !shell-command
Read in the specified file. If the argument begins with an exclamation point (!), the rest of the string is taken as an arbitrary shell command and is executed, with the standard output inserted into the message.
~s string ... Set the subject line to string.
~t name ... Add the given names to the To list.
~v Invoke a preferred screen editor on the partial message. See also ‘VISUAL’ (VARIABLES).
~w filename Write the partial message onto the given file, without the header.
~x Exit as with ~q except the message is not saved in the dead.letter file.
~| shell-command
Pipe the body of the message through the given shell-command. If the shell-command returns a successful exit status, the output of the command replaces the message.
VARIABLES
The following are environment variables taken from the execution environment and are not alterable within mail.
HOME=directory
The user’s base of operations.
MAILRC=filename
The name of the start-up file. Default is $HOME/.mailrc.
The following variables are internal mail variables. They may be imported from the execution environment or set via the set command at any time. The unset command may be used to erase variables. Using the set command with a no prepended to the variable name has the same effect as using the unset command with the variable name.
allnet All network names whose last component (login name) match are treated as identical. This causes the msglist message specifications to behave similarly. Default is noallnet. See also the alternates command and the ‘metoo’ variable.
alwaysignore Ignores header fields with ignore everywhere, not just during print or type. Affects the save, Save, copy, Copy, top, pipe, and write commands, and the ~m and ~f tilde escapes.
append Upon termination, append messages to the end of the mbox file instead of prepending them. Default is noappend but append is set in the global start-up file (which can be suppressed with the −n command line option).
askcc Prompt for the Cc list after message is entered. Default is noaskcc.
asksub Prompt for subject if it is not specified on the command line with the −s option. Enabled by default.
autoprint Enable automatic printing of messages after delete and undelete commands. Default is noautoprint.
bang Enable the special-casing of exclamation points (!) in shell escape command lines as in vi. Default is nobang.
cmd=shell-command
Set the default command for the pipe command. No default value.
conv=conversion
Convert uucp addresses to the specified address style. The only valid conversion now is internet, which requires a mail delivery program conforming to the RFC822 standard for electronic mail addressing. Conversion is disabled by default. See also ‘sendmail’ and the −U command line option.
crt=number Pipe messages having more than number lines through the command specified by the value of the ‘PAGER’ variable (more by default). Disabled by default.
DEAD=filename
The name of the file in which to save partial letters in case of untimely interrupt or delivery errors. Default is $HOME/dead.letter.
debug Enable verbose diagnostics for debugging. Messages are not delivered. Default is nodebug.
dot Take a period on a line by itself during input from a terminal as end-of-file. Default is nodot but dot is set in the global start-up file (which can be suppressed with the −n command line option).
EDITOR=shell-command
The command to run when the edit or ~e command is used. Default is ex.
escape=c Substitute c for the ~ escape character.
folder=directory
The directory for saving standard mail files. User specified file names beginning with a plus (+) are expanded by preceding the filename with this directory name to obtain the real filename. If directory does not start with a slash (/), $HOME is prepended to it. There is no default for the ‘folder’ variable. See also ‘outfolder’ below.
header Enable printing of the header summary when entering mail. Enabled by default.
hold Preserve all messages that are read in the mailbox instead of putting them in the standard mbox save file. Default is nohold.
ignore Ignore interrupts while entering messages. Handy for noisy dial-up lines. Default is noignore.
ignoreeof Ignore end-of-file during message input. Input must be terminated by a period (.) on a line by itself or by the ~. command. Default is noignoreeof. See also ‘dot’ above.
keep When the mailbox is empty, truncate it to zero length instead of removing it. Disabled by default.
keepsave Keep messages that have been saved in other files in the mailbox instead of deleting them. Default is nokeepsave.
LISTER=shell-command
The command (and options) to use when listing the contents of the ‘folder’ directory. The default is ls.
MBOX=filename
The name of the file to save messages which have been read. The xit command overrides this function, as does saving the message explicitly in another file. Default is $HOME/mbox.
metoo If your login appears as a recipient, do not delete it from the list. Default is nometoo.
no When used as a prefix to a variable name, has the effect of unsetting the variable.
onehop When responding to a message that was originally sent to several recipients, the other recipient addresses are normally forced to be relative to the originating author’s machine for the response. This flag disables alteration of the recipients’ addresses, improving efficiency in a network where all machines can send directly to all other machines (that is, one hop away).
outfolder Locates the files used to record outgoing messages in the directory specified by the ‘folder’ variable unless the pathname is absolute. Default is nooutfolder. See ‘folder’ above and the Save, Copy, followup, and Followup commands.
page Used with the pipe command to insert a form feed after each message sent through the pipe. Default is nopage.
PAGER=shell-command
The command to use as a filter for paginating output. This can also be used to specify the options to be used. Default is more.
prompt=string
Set the command mode prompt to string. Default is ‘& ’.
quiet Refrain from printing the opening message and version when entering mail. Default is noquiet.
record=filename
Record all outgoing mail in filename. Disabled by default. See also ‘outfolder’ above.
replyall Reverses the effect of the reply and Reply commands.
save Enable saving of messages in the dead.letter file on interrupt or delivery error. See ‘DEAD’ for a description of this file. Enabled by default.
screen=number
Sets the number of lines in a screen−full of headers for the headers command.
sendmail=shell-command
Alternate command for delivering messages. Default is sendmail.
sendwait Wait for background mailer to finish before returning. Default is nosendwait.
SHELL=shell-command
The name of a preferred command interpreter. Default is sh. Normally inherited from the environment.
showto When displaying the header summary and the message is from you, print the recipient’s name instead of the author’s name.
sign=string The variable inserted into the text of a message when the ~a (autograph) command is given. No default (see also ~i (TILDE ESCAPES)).
Sign=string The variable inserted into the text of a message when the ~A command is given. No default (see also ~i (TILDE ESCAPES)).
toplines=number
The number of lines of header to print with the top command. Default is 5.
verbose Invoke sendmail with the −v flag.
VISUAL=shell-command
The name of a preferred screen editor. Default is vi.
FILES
$HOME/.mailrcpersonal start-up file
$HOME/mboxsecondary storage file
/usr/spool/mail/∗post office directory
/usr/lib/Mail.help∗help message files
/usr/lib/Mail.rcglobal start-up file
/tmp/R[emqsx]∗temporary files
SEE ALSO
binmail(1), sendmail(8), mailaddr(7) biff(1), fmt(1), aliases(5), newaliases(8).
Mail is found in /usr/ucb/Mail, as a link to /usr/ucb/mail. If you wish to use the original (version 7) UNIX mail program, you can find it in /bin/mail. Its man page is named binmail(1).
BUGS
Where shell-command is shown as valid, arguments are not always allowed. Experimentation is recommended.
Internal variables imported from the execution environment cannot be unset.
The full internet addressing is not fully supported by mail. The new standards need some time to settle down.
Sun Release 3.0β — Last change: 23 September 1985