mailproc(1) DG/UX R4.11 mailproc(1)
NAME
mailproc - mail file processor
SYNOPSIS
mailproc -y
mailproc [-alnoprsvV] [-f filename] [-c command-file] [-d directory]
[-e command-expression]
DESCRIPTION
The mailproc command is a utility that parses a mail format file into
messages and then performs a set of tests on each message. If a
given test succeeds, the associated action is performed on the
message. The message is then removed from the mail file unless
otherwise indicated.
Each test and action pair comprises a mailproc command:
user:test:exit-code-specification:action The user field is used to
match the return path from the message, as derived from the >From
UNIX postmarks found in the message. A null user field will match
any message. The user field is a regular expression as used by
egrep. Thus, the string ihuge!.+ would match all messages sent from
machine ihuge.
The test field specifies the UNIX command or regular expression match
to be evaluated. This test may access the whole message, the message
text, and/or values of the mail header lines (see the section on
Escapes, below). The default test is true. If the first character
of the test field is a tilde (~), then a regular expression match
will be performed. The pattern which follows, up to the next tilde,
is matched against the string after that, up to the following tilde.
An example of the regular expression match would be ~%{From}~Milton~
to match any messages with a From header that has the string "Milton"
present.
The exit-code-specification field specifies the disposition of the
message after the action command is executed. It is described
further below.
The action field specifies the UNIX command to be evaluated upon
success of the indicated test. This action has access to all the
information available to the test. The default action is no action.
For a given message, mailproc will start at the beginning of the
command list, trying to match the return address of the message with
the user field of the command. If the match succeeds, the test will
be executed. If the test succeeds, the action will be executed.
Failure of the match, the test, or the action will cause mailproc to
continue to the next command.
Once a message has successfully passed the action, it is marked as
processed. The determination of whether an action command succeeded
or failed is determined by the exit-code-specification. Successfully
processed messages will be removed from the mail file unless the exit
code is marked as a continuation by the exit-code-specification.
An exit-code-specification looks like: S=ec;K=ec;C=ec; In each case,
ec is a list of numbers or ranges of numbers, separated by commas, or
the wild card *. This is exactly the same as the exit codes used in
personal surrogates (see mail) and the mail surrogate file (see
mailsurr). The exit codes following S= are used to indicate success,
along with deletion of the message. The exit codes following K= are
used to indicate success, along with keeping the message in the
mailfile. The exit codes following C= are used to indicate
continuation, causing further commands in the command list to be
processed. For example, the following exit-code-specification,
S=1-4,99;K=0,12;C=*; says that when the action command returns with
the exit codes of 1, 2, 3, 4 or 99, the message is to be considered
successfully processed and removed from the mail file. When the
action command returns with the exit codes of 0 or 12, the message is
to be considered successfully processed, but kept in the mail file.
When the action command returns with any other exit codes, the next
command in the command list is to be processed.
If one is not specified, the default exit-code-specification is:
S=0;C=*; (The S=, K= and C= exit codes are looked at in that order.)
When run on a mailbox, mailproc modifies any messages left in the
mailbox by adding a Status header with a value of F.
ESCAPES
mailproc commands support a number of %-escapes to make information
available to the test and the action commands. The supported escapes
are:
%d Returns the message date string.
%!F,%@F Returns the full from mail path in ! style and @
style, respectively.
%f Returns the portion of the from mail path matching
the user field.
%s Returns the subject header of the message.
%m Returns a filename containing just the body of the
message.
%M Returns a filename containing the entire message
(headers and all).
%H Returns a filename containing the message header.
%string Returns the value of the header named string. (Only
the first line of the first such header is
returned.)
%% Returns a single %. This escape must be used if any
%'s need to be included in the user, test and action
fields.
%: Returns a colon. This escape must be used if any
colons need to be included in the user, test and
action fields.
In addition to these escapes, the action supports several special
forms. These special forms are used to aid in moving messages to
files.
%m> file Place the message text in the file file.
%m>> file Append the message text to the file file.
%M> file Place the full message (including headers) in the
file file.
%M>> file Append the full message (including headers) to the
file file.
OPTIONS
mailproc supports the following options:
-y Install a personal mail surrogate that reads:
mailproc -p Note that this is equivalent to running
the command mail -F "| S=0;C=1;F=*mailproc -p" and
that the mailproc options of -c, -d, -e and -f are
passed along as well. To remove the personal mail
surrogate, execute the command: mail -F ""
-a Process all messages in the mail file. The default
is to process only the new messages. A message is
considered new if it does not contain a Status:
header, as put in by the mailx(1) command or
mailproc.
-l Provide a list of the messages in the mail file. No
further processing of the mail file will be done.
-n Indicate what action would be taken if mailproc were
executed without the -n option. This option is
similar to the -n option of make(1).
-o Send output from the test and action to standard
output. The default is to redirect stdout and
stderr to /dev/null.
-r Process the mailbox in read-only mode. This means
that mailproc does all the specified processing,
including writing messages into files, but the
temporary processed mailbox is not copied back into
the mailbox. Thus, when run on a mailbox, the
mailbox will not be changed (no messages will be
removed and no Status lines added). When run on
stdin, no messages will be written to stdout. This
option is useful for repetitive processing of a
mailbox.
-s Read mail file input from stdin and write output to
stdout. This option is ignored if the -f option is
specified.
-p This option is the same as the -s option except that
it assumes that the input is a single message. This
option is intended for use as a mail personal mail
surrogate.
-v Provide a verbose description of the operation on a
message by message basis.
-V Print the mailproc version number. No mail file
processing is done.
-f filename
Specifies the mail file from which input is to be
taken. If this option is not specified and the -s
option is not used, the input file defaults to the
file indicated by the user's MAIL environment
variable. If this variable is unset or null, the
input file is taken to be /var/mail/$LOGNAME.
-c command-file
Specifies the file from which the commands are to be
read. If this option is not specified and the -e
option is not used, the command file defaults to the
file indicated by the MAILPROCRC environment
variable. If this variable is unset or null, the
input file is taken to be $HOME/.mailprocrc.
-e command
Specifies a mailproc command to be used. This
option can be used to augment the commands from a
command file or it can be used alone. Commands
specified with the -e option are executed before
those in a specified command file. Multiple -e
options may be specified.
-d directory
Specifies the directory in which the commands are to
be executed.
EXIT CODES
When executed with the -p option, mailproc exits with a 0 if the
message was successfully processed, a 1 if the message is to be left
in the mailbox due to either a C= exit code or if none of the command
actions match, and a 2 if there are any problems.
When executed with the -y option, mailproc exits with a 0 if the
mailbox was successfully updated, and non-zero otherwise.
When executed without either the -p or -y options, mailproc exits
with a 0 if the mailbox was successfully processed, and non-zero
otherwise.
EXAMPLES
# list new messages in $MAIL
#
$ mailproc -l
# list all messages in $MAIL
#
$ mailproc -la
$ cat cmdfile1
# Remove non-error line printer messages
#
lp:grep 'Job.*to printer'::
$ mailproc -c cmdfile1
$ cat cmdfile2
# Automatically save messages about created MRs in
# $HOME/mrs/mrlog
#
:grep 'MR.*created'::%m>>mrlog
$ mailproc -c cmdfile2 -d mrs
$ cat cmdfile3
# Remove messages from UUCP uucleans
#
uucp:~uuclean ran~%s~::
$ mailproc -c cmdfile3
$ cat cmdfile4
# Warn me of messages from myboss
#
myboss::C=*;:echo "Mail from %f has arrived!!" | write me
$ mailproc -c cmdfile4
Message from user on system (tty001) [ Mon Feb 22 16:20:41 ] ...
Mail from myboss has arrived!!
<EOT>
$ cat cmdfile5
# Automatic request processing, uses external
# /bin/test process to execute test
#
:[ "%s" = "Request Document" ]::mail %@F < Docfile
$ mailproc -c cmdfile5
# Print all the messages (old and new) from 'user1' in mailfile
$ mailproc -a -f mailfile -e "user1::C=*:%M>/dev/tty"
...
$
# Show the subject of all messages from the system foo
$ mailproc -a -f mailfile -e "foo!*::C=*:echo '%f %s'>/dev/tty"
...
$
# Print messages from 'user' in 'file' without changing 'file'
$ mailproc -o -a -r -f file -e "user:::cat %M"
- or -
$ mailproc -s -o -a -r -e "user:::cat %M" < file
- or -
$ mailproc -s -a -e "user::C=*:" -e ":::" < file
# Save all messages sent to net-dept
$ mailproc -e ":grep '^To:.*net-dept' %M::>>deptlog"
$
# install mailproc as a personal mail surrogate
# use $HOME/procmail/cmdfile as the command list
# and use $HOME/procmail as the save directory
$ mailproc -y -c procmail/cmdfile -d procmail
FILES
$MAILPROCRC
Default location of the command file, mailproc.
$HOME/.mailprocrc
Default location of the command file if MAILPROCRC is unset or
null.
$MAIL Default location of the mail file.
/var/mail/$LOGNAME
Default location of the mail file if $MAIL is unset or null.
$MAILPROCDIR
Directory in which the commands are to be executed.
Licensed material--property of copyright holder(s)