-.\"
+.TH SLOCAL %manext1% 2016-05-02 "%nmhversion%"
+.
.\" %nmhwarning%
-.\" $Id$
-.\"
-.TH SLOCAL %manext1% "%nmhdate%" MH.6.8 [%nmhversion%]
+.
.SH NAME
-slocal \- asynchronously filter and deliver new mail
+slocal \- asynchronously filter and deliver new mail to nmh
.SH SYNOPSIS
.HP 5
.na
-.B %libdir%/slocal
-[address\ info\ sender]
+.B %nmhlibexecdir%/slocal
+.RB [ \-help ]
+.RB [ \-version ]
.RB [ \-addr
.IR address ]
.RB [ \-info
.RB [ \-verbose " | " \-noverbose ]
.RB [ \-suppressdup " | " \-nosuppressdup ]
.RB [ \-debug ]
-.RB [ \-version ]
-.RB [ \-help ]
.ad
.SH DESCRIPTION
-.B Slocal
+.B slocal
is a program designed to allow you to have your inbound
mail processed according to a complex set of selection criteria.
You do not normally invoke
when the message arrives.
.PP
The message selection criteria used by
-.B slocal is specified
-in the file
-.RI \*(lq \&.maildelivery \*(rq
+.B slocal
+is specified in the file
+.RI \*(lq .maildelivery \*(rq
in the user's home directory.
You can specify an alternate file with the
.B \-maildelivery
.BR sendmail ,
the sender will obtained from the UUCP
\*(lqFrom:\*(rq line, if present. The user may override these
-values with command line arguments, or arguments to the
+values with the
.B \-addr
and
.B \-sender
.B \-file
switch sets the name of the file from which the message should be
read, instead of reading stdin. This is useful when debugging a
-.RI \*(lq \&.maildelivery \*(rq
+.RI \*(lq .maildelivery \*(rq
file.
.PP
The
switch tells
.B slocal
the name of the user for
-whom it is delivering mail. The
+whom it is delivering mail. It must exist on the local system. The
.B \-mailbox
switch tells
.B slocal
-the name of the user's maildrop file.
+the name of the user's mail drop file.
.PP
.B slocal
is able to detect and suppress duplicate messages.
switch produces more
verbose debugging output on stderr. These flags are useful when
creating and debugging your
-.RI \*(lq \&.maildelivery \*(rq
+.RI \*(lq .maildelivery \*(rq
file, as they
allow you to see the decisions and actions that
.B slocal
is taking, as well as check for syntax errors in your
-.RI \*(lq \&.maildelivery \*(rq
+.RI \*(lq .maildelivery \*(rq
file.
-
.SS "Message Transfer Agents"
-If your MTA is
+Most modern MTAs including
.BR sendmail ,
-you should include the line
+.BR postfix ,
+and
+.B exim
+support a \&.forward file for directing incoming mail.
+You should include the line
.PP
-.RS 5
-\*(lq|\ %libdir%/slocal\ \-user\ username\*(rq
-.RE
+.ce
+\*(lq|\ %nmhlibexecdir%/slocal\ \-user\ username\*(rq
.PP
in your \&.forward file in your home directory. This will cause
-.B sendmail
-to invoke
+your MTA to invoke
.B slocal
on your behalf when a message arrives.
-.PP
-If your MTA is
-.BR MMDF-I ,
-you should (symbolically) link
-.B %libdir%/slocal
-to the file
-.B bin/rcvmail
-in your home directory. This will
-cause
-.B MMDF-I
-to invoke
-.B slocal
-on your behalf with the correct
-.RI \*(lq "address\ info\ sender" \*(rq
-arguments.
-.PP
-If your MTA is
-.BR MMDF-II ,
-then you should not use
-.B slocal.
-An equivalent functionality is already provided by
-.BR MMDF-II ;
-see
-.BR maildelivery (5)
-for details.
-
.SS "The Maildelivery File"
The
-.RI \*(lq \&.maildelivery \*(rq
+.RI \*(lq .maildelivery \*(rq
file controls how
.B slocal
filters and delivers
incoming mail. Each line of this file consists of five fields, separated
-by white-space or comma. Since double-quotes are honored, these
+by whitespace or comma. Since double-quotes are honored, these
characters may be included in a single argument by enclosing the entire
argument in double-quotes. A double-quote can be included by preceding it
with a backslash. Lines beginning with `#' and blank lines are ignored.
.PP
The format of each line in the
-.RI \*(lq \&.maildelivery \*(rq
+.RI \*(lq .maildelivery \*(rq
file is:
.PP
.RS 5
-.B header pattern action result string
+.B "header pattern action result string"
.RE
.PP
.BR header :
.TP \w'defaultrrr'u
.I default
this matches
-.B only
+.I only
if the message hasn't been delivered yet
.TP \w'defaultrrr'u
.I *
The action to take to deliver the message. When a message is delivered,
a \*(lqDelivery\-Date:\ date\*(rq header is added which indicates the date
and time that message was delivered.
-.TP \w'qpipezorztzzz'u
+.TP 4
.I destroy
This action always succeeds.
+.TP 4
.IR file ", " mbox ", or " >
Append the message to the file named by
.IR string .
appended to the file in mbox (uucp) format. This is the format used by most
other mail clients (such as mailx, elm). If the message can be appended to
the file, then this action succeeds.
-.TP \w'qpipezorztzzz'u
+.TP 4
.I mmdf
Identical to
.IR file ,
but always appends the message using the MMDF mailbox format.
-.TP \w'qpipezorztzzz'u
+.TP 4
.IR pipe " or " |
Pipe the message as the standard input to the command named by
.IR string ,
to interpret the string.
Prior to giving the string to the shell, it is expanded with the following
built-in variables:
-.RS \w'qpipezorztzzz'u
+.RS
.TP \w'zzreplyztozaaa'u
$(sender)
the out-of-band sender information
$(info)
the out-of-band information specified
.RE
-.PP
-.TP \w'qpipezorztzzz'u
+.TP 4
.IR qpipe " or " ^
Similar to
.IR pipe ,
directly, after built-in variable expansion, without assistance from
the shell. This action can be used to avoid quoting special characters
which your shell might interpret.
-.TP \w'qpipezorztzzz'u
+.TP 4
.IR folder " or " +
Store the message in the
.B nmh
is considered delivered.
.TP \w'Azzz'u
.I R
-Perform the action. Regardless of the outcome of the action,
+Perform the action. Regardless of the outcome of the action,
the message is not considered delivered.
.TP \w'Azzz'u
.I ?
The delivery file is always read completely, so that several matches
can be made and several actions can be taken.
.RE
-
.SS "Security of Delivery Files"
In order to prevent security problems, the
-.RI \*(lq \&.maildelivery \*(rq
+.RI \*(lq .maildelivery \*(rq
file must be owned either by the user or by root, and must be
writable only by the owner. If this is not the case, the file is
not read.
.PP
If the
-.RI \*(lq \&.maildelivery \*(rq
+.RI \*(lq .maildelivery \*(rq
file cannot be found, or does not
perform an action which delivers the message, then
.B slocal
will check for a global delivery file at
-.IR %etcdir%/maildelivery .
+.IR %nmhetcdir%/maildelivery .
This file is read according to the same rules. This file must be
-owned by the root and must be writable only by the root.
+owned by root and must be writable only by root.
.PP
If a global delivery file cannot be found or does not perform an
action which delivers the message, then standard delivery to the
-user's maildrop is performed.
-
+user's mail drop is performed.
.SS "Example Delivery File"
To summarize, here's an example delivery file:
.PP
default \- file ? mailbox
# always run rcvtty
-* \- pipe R /nmh/lib/rcvtty
+* \- pipe R %nmhlibexecdir%/rcvtty
.fi
-
.SS "Sub-process environment"
When a process is invoked, its environment is: the user/group-ids are
set to recipient's ids; the working directory is the recipient's home
.PP
In order to avoid any time limitations, you might implement a process
that began by
-.BR fork ()-ing.
+.IR fork ()-ing.
The parent would return the appropriate
value immediately, and the child could continue on, doing whatever it
wanted for as long as it wanted. This approach is somewhat risky if
the parent is going to return an exit status of zero. If the parent is
going to return a non-zero exit status, then this approach can lead to
-quicker delivery into your maildrop.
-
+quicker delivery into your mail drop.
.SH FILES
.fc ^ ~
.nf
-.ta \w'%etcdir%/ExtraBigFileName 'u
-^%etcdir%/mts.conf~^nmh mts configuration file
-^$HOME/\&.maildelivery~^The file controlling local delivery
-^%etcdir%/maildelivery~^Rather than the standard file
-^%mailspool%/$USER~^The default maildrop
+.ta \w'%nmhetcdir%/ExtraBigFileName 'u
+^%nmhetcdir%/mts.conf~^nmh mts configuration file
+^$HOME/.maildelivery~^The file controlling local delivery
+^%nmhetcdir%/maildelivery~^Rather than the standard file
+^%mailspool%/$USER~^The default mail drop
.fi
-
.SH "SEE ALSO"
-rcvdist(1), rcvpack(1), rcvstore(1), rcvtty(1), mh\-format(5)
-
+.IR rcvdist (1),
+.IR rcvpack (1),
+.IR rcvstore (1),
+.IR rcvtty (1),
+.IR mh\-format (5)
.SH DEFAULTS
.nf
.RB ` \-noverbose '
.RB ` \-nosuppressdup '
-.RB ` \-maildelivery "' defaults to $HOME/\&.maildelivery"
-.RB ` \-mailbox "' deaults to %mailspool%/$USER"
+.RB ` \-maildelivery "' defaults to $HOME/.maildelivery"
+.RB ` \-mailbox "' defaults to %mailspool%/$USER"
.RB ` \-file "' defaults to stdin"
+.RB ` \-addr "' defaults to the current user"
.RB ` \-user "' defaults to the current user"
.fi
-
+.PP
+.B \-addr
+and
+.B \-user
+will be set the the user part of the Local-Mailbox profile entry, if set.
.SH CONTEXT
None
-
.SH HISTORY
-.B Slocal
+.B slocal
was originally designed to be backward-compatible with
the
.B maildelivery
facility provided by
.BR MMDF-II .
Thus, the
-.RI \*(lq \&.maildelivery \*(rq
+.RI \*(lq .maildelivery \*(rq
file syntax is somewhat limited. But
.B slocal
has been modified and extended, so that is it no longer compatible with
value
.B RP_MECH
(200), which means
-\*(lquse an alternate route\*(rq (deliver the message to the maildrop).
-
+\*(lquse an alternate route\*(rq (deliver the message to the mail drop).
.SH BUGS
Only two return codes are meaningful, others should be.
.PP
-.B Slocal
+.B slocal
was originally designed to be backwards-compatible with the
.B maildelivery
functionality provided by