summaryrefslogtreecommitdiffstats
path: root/upstream/opensuse-tumbleweed/man5/procmailrc.5
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/opensuse-tumbleweed/man5/procmailrc.5')
-rw-r--r--upstream/opensuse-tumbleweed/man5/procmailrc.5929
1 files changed, 929 insertions, 0 deletions
diff --git a/upstream/opensuse-tumbleweed/man5/procmailrc.5 b/upstream/opensuse-tumbleweed/man5/procmailrc.5
new file mode 100644
index 00000000..2e4715cf
--- /dev/null
+++ b/upstream/opensuse-tumbleweed/man5/procmailrc.5
@@ -0,0 +1,929 @@
+.\"if n .pl +(135i-\n(.pu)
+.de Id
+.ds Rv \\$3
+.ds Dt \\$4
+..
+.Id $Id$
+.TH PROCMAILRC 5 \*(Dt BuGless
+.rn SH Sh
+.de SH
+.br
+.ne 11
+.Sh "\\$1"
+..
+.rn SS Ss
+.de SS
+.br
+.ne 10
+.Ss "\\$1"
+..
+.rn TP Tp
+.de TP
+.br
+.ne 9
+.Tp \\$1
+..
+.rn RS Rs
+.de RS
+.na
+.nf
+.Rs
+..
+.rn RE Re
+.de RE
+.Re
+.fi
+.ad
+..
+.de Sx
+.PP
+.ne \\$1
+.RS
+..
+.de Ex
+.RE
+.PP
+..
+.na
+.SH NAME
+procmailrc \- procmail rcfile
+.SH SYNOPSIS
+.B $HOME/.procmailrc
+.ad
+.SH DESCRIPTION
+For a quick start, see
+.B NOTES
+at the end of the
+.BR procmail (1)
+man page.
+.PP
+The rcfile can contain a mixture of environment variable assignments (some
+of which have special meanings to procmail), and recipes. In their most
+simple appearance, the recipes are simply one line regular expressions
+that are searched for in the header of the arriving mail. The first recipe
+that matches is used to determine where the mail has to go (usually a file).
+If processing falls off the end of the rcfile, procmail will deliver the mail
+to
+.BR $DEFAULT .
+.PP
+There are two kinds of recipes: delivering and non-delivering recipes.
+If a
+.I delivering recipe
+is found to match, procmail considers the mail (you guessed it) delivered and
+will
+.I cease processing
+the rcfile after having successfully executed the action line of the recipe.
+If a
+.I non-delivering recipe
+is found to match, processing of the rcfile will
+.I continue
+after the action line of this recipe has been executed.
+.PP
+Delivering recipes are those that cause header and/or body of the mail to
+be: written into a file, absorbed by a program or forwarded to a mailaddress.
+.PP
+Non-delivering recipes are: those that cause the output of a program or
+filter to be captured back by procmail or those that start a nesting block.
+.PP
+You can tell procmail to treat a
+.I delivering recipe
+as if it were a non-delivering recipe by specifying the `c' flag on
+such a recipe. This will make procmail generate a
+.I carbon copy
+of the mail by delivering it to this recipe, yet continue processing the
+rcfile.
+.PP
+By using any number of recipes you can presort your mail extremely
+straightforward into several mailfolders. Bear in mind though that the mail
+can arrive concurrently in these mailfolders (if several procmail programs
+happen to run at the same time, not unlikely if a lot of mail arrives). To
+make sure this does not result in a mess, proper use of lockfiles is highly
+recommended.
+.PP
+The environment variable
+.B assignments
+and
+.B recipes
+can be freely intermixed in the rcfile. If any environment variable has
+a special meaning to procmail, it will be used appropriately the moment
+it is parsed (i.e., you can change the current directory whenever you
+want by specifying a new
+.BR MAILDIR ,
+switch lockfiles by specifying a new
+.BR LOCKFILE ,
+change the umask at any time, etc., the possibilities are endless :\-).
+.PP
+The assignments and substitutions of these environment variables are handled
+exactly like in
+.BR sh (1)
+(that includes all possible quotes and escapes),
+with the added bonus that blanks around the '=' sign are ignored and that,
+if an environment variable appears without a trailing '=', it will be
+removed from the environment. Any program in backquotes started by procmail
+will have the entire mail at its stdin.
+.PP
+.SS Comments
+A word beginning with # and all the following characters up to a NEWLINE
+are ignored. This does not apply to condition lines, which cannot be
+commented.
+.SS Recipes
+.PP
+A line starting with ':' marks the beginning of a recipe. It has the
+following format:
+.Sx 3
+:0 [\fIflags\fP] [ : [\fIlocallockfile\fP] ]
+<zero or more conditions (one per line)>
+<exactly one action line>
+.Ex
+Conditions start with a leading `*', everything after that character
+is passed on to the internal egrep
+.BR literally ,
+except for leading and trailing whitespace.
+These regular expressions are
+.B completely
+compatible to the normal
+.BR egrep (1)
+extended regular expressions. See also
+.BR "Extended regular expressions" .
+.PP
+Conditions are anded; if there are no conditions the result will be true
+by default.
+.PP
+.I Flags
+can be any of the following:
+.TP 0.5i
+.B H
+Egrep the header (default).
+.TP
+.B B
+Egrep the body.
+.TP
+.B D
+Tell the internal egrep to distinguish between upper and lower case (contrary
+to the default which is to ignore case).
+.TP
+.B A
+This recipe will not be executed unless the conditions on the last preceding
+recipe (on the current block-nesting level) without the `A' or
+`a' flag matched as well. This allows you to chain actions
+that depend on a common condition.
+.TP
+.B a
+Has the same meaning as the `A' flag, with the additional
+condition that the immediately preceding recipe must have been
+.I successfully
+completed before this recipe is executed.
+.TP
+.B E
+This recipe only executes if the immediately preceding recipe was not
+executed. Execution of this recipe also disables any immediately
+following recipes with the 'E' flag. This allows you to specify
+`else if' actions.
+.TP
+.B e
+This recipe only executes if the immediately preceding recipe
+.IR failed
+(i.e., the action line was attempted, but resulted in an error).
+.TP
+.B h
+Feed the header to the pipe, file or mail destination (default).
+.TP
+.B b
+Feed the body to the pipe, file or mail destination (default).
+.TP
+.B f
+Consider the pipe as a filter.
+.TP
+.B c
+Generate a
+.B carbon copy
+of this mail. This only makes sense on
+.I delivering
+recipes. The only non-delivering recipe this flag has an effect on is
+on a nesting block, in order to generate a carbon copy this will
+.B clone
+the running procmail process (lockfiles will not be inherited), whereby
+the clone will proceed as usual and the parent will jump across the block.
+.TP
+.B w
+Wait for the filter or program to finish and check its exitcode (normally
+ignored); if the filter is unsuccessful, then the text will not have been
+filtered.
+.TP
+.B W
+Has the same meaning as the `w' flag, but will suppress any
+`Program failure' message.
+.TP
+.B i
+Ignore any write errors on this recipe (i.e., usually due to an early closed
+pipe).
+.TP
+.B r
+Raw mode, do not try to ensure the mail ends with an empty line, write
+it out as is.
+.PP
+There are some special conditions you can use that are not straight regular
+expressions. To select them, the condition must start with:
+.TP 0.5i
+.B !
+Invert the condition.
+.TP
+.B $
+Evaluate the remainder of this condition according to
+.BR sh (1)
+substitution rules inside double quotes, skip leading whitespace,
+then reparse it.
+.TP
+.B ?
+Use the exitcode of the specified program.
+.TP
+.B <
+Check if the total length of the mail is shorter than the specified (in
+decimal) number of bytes.
+.TP
+.B >
+Analogous to '<'.
+.TP
+.B "variablename \fI??\fP"
+Match the remainder of this condition against the value of this environment
+variable (which cannot be a pseudo variable). A special case is if
+variablename is equal to `B', `H', `HB' or `BH'; this merely overrides the
+default header/body search area defined by the initial flags on this recipe.
+.TP
+.B \e
+To quote any of the above at the start of the line.
+.SS "Local lockfile"
+.PP
+If you put a second (trailing) ':' on the first recipe line, then procmail
+will use a
+.I locallockfile
+(for this recipe only). You can optionally specify the locallockfile
+to use; if you don't however, procmail will use the destination filename
+(or the filename following the first '>>') and will append $LOCKEXT to it.
+.SS "Recipe action line"
+.PP
+The action line can start with the following characters:
+.TP
+.B !
+Forwards to all the specified mail addresses.
+.TP
+.B |
+Starts the specified program, possibly in $SHELL if any
+of the characters $SHELLMETAS are spotted. You can optionally prepend this
+pipe symbol with
+.IR variable= ,
+which will cause stdout of the program to be captured in the environment
+.I variable
+(procmail will
+.B not
+terminate processing the rcfile at this point).
+If you specify just this pipe symbol, without any program, then procmail will
+pipe the mail to stdout.
+.TP
+.B {
+Followed by at least one space, tab or newline will mark the start of a
+nesting block. Everything up till the next closing brace will depend on
+the conditions specified for this recipe. Unlimited nesting is permitted.
+The closing brace exists merely to delimit the block, it will
+.I not
+cause procmail to terminate in any way. If the end of a block is reached
+processing will continue as usual after the block.
+On a nesting block, the flags `H' and `B' only affect
+the conditions leading up to the block, the flags `h' and
+`b' have no effect whatsoever.
+.PP
+Anything else will be taken as a mailbox name (either a filename or a
+directory, absolute or relative to the current directory (see MAILDIR)).
+If it is a (possibly yet nonexistent) filename, the mail will be appended to
+it.
+.PP
+If it is a directory, the mail will be delivered to a newly created,
+guaranteed to be unique file named $MSGPREFIX* in the specified directory.
+If the mailbox name ends in "/.", then this directory is
+presumed to be an MH folder; i.e., procmail will use the next number it
+finds available. If the mailbox name ends in "/", then this
+directory is presumed to be a maildir folder; i.e., procmail will deliver
+the message to a file in a subdirectory named "tmp" and rename it to be
+inside a subdirectory named "new". If the mailbox is specified to be an MH
+folder or maildir folder, procmail will create the necessary directories if
+they don't exist, rather than treat the mailbox as a non-existent
+filename. When procmail is delivering to directories, you can specify
+multiple directories to deliver to (procmail will do so utilising
+hardlinks).
+.SS "Environment variable defaults"
+.TP 2.2i
+.B "LOGNAME, HOME and USER_SHELL"
+Your (the recipient's) defaults
+.TP
+.B SHELL
+\&/bin/sh
+.TP
+.B PATH
+.na
+\&$HOME/bin\h'-\w' 'u' :/bin\h'-\w' 'u' :/usr/bin\h'-\w' 'u' :/sbin\h'-\w' 'u' :/usr/sbin\h'-\w' 'u' :/usr/local/bin
+(Except
+.ad
+during the processing of an /etc/procmailrc file, when it will be set
+to
+.na
+`\&/usr/local/bin\h'-\w' 'u' :/usr/bin\h'-\w' 'u' :/bin'.)
+.ad
+.TP
+.B SHELLMETAS
+\&&\h'-\w' 'u' |<>~;?*[
+.TP
+.B SHELLFLAGS
+\&-c
+.TP
+.BR ORGMAIL
+\&/var/spool/mail/$LOGNAME
+.br
+(Unless
+.B \-m
+has been specified, in which case it is unset)
+.TP
+.B MAILDIR
+\&$HOME
+.br
+(Unless the name of the first successfully opened rcfile starts with
+`./' or if
+.B \-m
+has been specified, in which case it defaults to `.')
+.TP
+.B DEFAULT
+\&$ORGMAIL
+.TP
+.B MSGPREFIX
+\&msg.
+.TP
+.B SENDMAIL
+\&/usr/sbin/sendmail
+.TP
+.B SENDMAILFLAGS
+\&-oi
+.TP
+.B HOST
+The current hostname
+.TP
+.B COMSAT
+\&no
+.br
+(If an rcfile is specified on the command line)
+.TP
+.B PROCMAIL_VERSION
+\&3.24
+.TP
+.B LOCKEXT
+\&.lock
+.na
+.PP
+Other cleared or preset environment variables are IFS, ENV and PWD.
+.ad
+.PP
+For security reasons, upon startup procmail will wipe out all environment variables that are suspected of modifying the behavior of the runtime linker.
+.SS Environment
+.PP
+Before you get lost in the multitude of environment variables, keep in mind
+that all of them have reasonable defaults.
+.TP 1.2i
+.B MAILDIR
+Current directory while procmail is executing (that means that all paths
+are relative to $MAILDIR).
+.TP
+.B DEFAULT
+Default
+.B mailbox
+file (if not told otherwise, procmail will dump mail in this mailbox).
+Procmail will automatically use $DEFAULT$LOCKEXT as lockfile prior to writing
+to this mailbox. You do not need to set this variable, since it already
+points to the standard system mailbox.
+.TP
+.B LOGFILE
+This file will also contain any error or diagnostic messages from procmail
+(normally none :\-) or any other programs started by procmail. If this file
+is not specified, any diagnostics or error messages will
+be mailed back to the sender.
+See also
+.BR LOGABSTRACT .
+.TP
+.B VERBOSE
+You can turn on
+.I extended diagnostics
+by setting this variable to `yes' or `on', to turn it off again set it to `no'
+or `off'.
+.TP
+.B LOGABSTRACT
+Just before procmail exits it logs an abstract of the delivered message in
+$LOGFILE showing the `From ' and `Subject:' fields of the header, what folder
+it finally went to and how long (in bytes) the message was. By setting this
+variable to `no', generation of this abstract is suppressed. If you set
+it to `all', procmail will log an abstract for every successful
+.I delivering recipe
+it processes.
+.TP
+.B LOG
+Anything assigned to this variable will be appended to $LOGFILE.
+.TP
+.B ORGMAIL
+Usually the system mailbox (\fBOR\fPi\fBG\fPinal \fBMAIL\fPbox). If, for
+some obscure reason (like `\fBfilesystem full\fP') the mail could not be
+delivered, then this mailbox will be the last resort. If procmail
+fails to save the mail in here (deep, deep trouble :\-), then the mail
+will bounce back to the sender.
+.TP
+.B LOCKFILE
+Global semaphore file. If this file already exists, procmail
+will wait until it has gone before proceeding, and will create it itself
+(cleaning it up when ready, of course). If more than one
+.I lockfile
+are specified, then the previous one will be removed before trying to create
+the new one. The use of a global lockfile is discouraged, whenever possible
+use locallockfiles (on a per recipe basis) instead.
+.TP
+.B LOCKEXT
+Default extension that is appended to a destination file to determine
+what local
+.I lockfile
+to use (only if turned on, on a per-recipe basis).
+.TP
+.B LOCKSLEEP
+Number of seconds procmail will sleep before retrying on a
+.I lockfile
+(if it already existed); if not specified, it defaults to 8
+seconds.
+.TP
+.B LOCKTIMEOUT
+Number of seconds that have to have passed since a
+.I lockfile
+was last modified/created before procmail decides that this must be an
+erroneously leftover lockfile that can be removed by force now. If zero,
+then no timeout will be used and procmail will wait forever until the
+lockfile is removed; if not specified, it defaults to 1024 seconds.
+This variable is useful to prevent indefinite hangups of
+.BR sendmail /procmail.
+Procmail is immune to clock skew across machines.
+.TP
+.B TIMEOUT
+Number of seconds that have to have passed before procmail decides that
+some child it started must be hanging. The offending program will receive
+a TERMINATE signal from procmail, and processing of the rcfile will continue.
+If zero, then no timeout will be used and procmail will wait forever until the
+child has terminated; if not specified, it defaults to 960 seconds.
+.TP
+.B MSGPREFIX
+Filename prefix that is used when delivering to a directory (not used when
+delivering to a maildir or an MH directory).
+.TP
+.B HOST
+If this is not the
+.I hostname
+of the machine, processing of the current
+.I rcfile
+will immediately cease. If other rcfiles were specified on the
+command line, processing will continue with the next one. If all rcfiles
+are exhausted, the program will terminate, but will not generate an error
+(i.e., to the mailer it will seem that the mail has been delivered).
+.TP
+.B UMASK
+The name says it all (if it doesn't, then forget about this one :\-).
+Anything assigned to UMASK is taken as an
+.B octal
+number. If not specified, the umask defaults to 077. If the umask
+permits o+x, all the mailboxes procmail delivers to directly will receive
+an o+x mode change. This can be used to check if new mail arrived.
+.TP
+.B SHELLMETAS
+If any of the characters in SHELLMETAS appears in the line specifying
+a filter or program, the line will be fed to $SHELL
+instead of being executed directly.
+.TP
+.B SHELLFLAGS
+Any invocation of $SHELL will be like:
+.br
+"$SHELL" "$SHELLFLAGS" "$*";
+.TP
+.B SENDMAIL
+If you're not using the
+.I forwarding
+facility don't worry about this one. It specifies the program being
+called to forward any mail.
+.br
+It gets invoked as: "$SENDMAIL" $SENDMAILFLAGS "$@";
+.TP
+.B NORESRETRY
+Number of retries that are to be made if any `\fBprocess table full\fP',
+`\fBfile table full\fP', `\fBout of memory\fP' or
+`\fBout of swap space\fP' error should occur. If this number is negative,
+then procmail will retry indefinitely; if not specified, it defaults to
+4 times. The retries occur with a $SUSPEND second interval. The
+idea behind this is that if, e.g., the
+.I swap
+.I space
+has been exhausted or the
+.I process
+.I table
+is full, usually several other programs will either detect this as well
+and abort or crash 8\-), thereby freeing valuable
+.I resources
+for procmail.
+.TP
+.B SUSPEND
+Number of seconds that procmail will pause if it has to wait for something
+that is currently unavailable (memory, fork, etc.); if not specified, it will
+default to 16 seconds. See also:
+.BR LOCKSLEEP .
+.TP
+.B LINEBUF
+Length of the internal line buffers, cannot be set smaller than 128.
+All lines read from the
+.I rcfile
+should not exceed $LINEBUF characters before and after expansion. If not
+specified, it defaults to 2048. This limit, of course, does
+.I not
+apply to the mail itself, which can have arbitrary line lengths, or could
+be a binary file for that matter. See also PROCMAIL_OVERFLOW.
+.TP
+.B DELIVERED
+If set to `yes' procmail will pretend (to the mail agent) the mail
+has been delivered. If mail cannot be delivered after having met this
+assignment (set to `yes'), the mail will be lost (i.e., it will not bounce).
+.TP
+.B TRAP
+When procmail terminates of its own accord and not because it
+received a signal, it will execute the contents of this variable.
+A copy of the mail can be read from stdin. Any output produced by this
+command will be appended to $LOGFILE. Possible uses for TRAP are: removal
+of temporary files, logging customised abstracts, etc. See also
+.B EXITCODE
+and
+.BR LOGABSTRACT .
+.TP
+.B EXITCODE
+By default, procmail returns an exitcode of zero (success) if it
+successfully delivered the message or if the
+.B HOST
+variable was misset and there were no more rcfiles on the command
+line; otherwise it returns failure. Before doing so, procmail
+examines the value of this variable. If it is set to a positive
+numeric value, procmail will instead use that value as its exitcode.
+If this variable is set but empty and
+.B TRAP
+is set, procmail will set the exitcode to whatever the
+.B TRAP
+program returns. If this variable is not set, procmail will set
+it shortly before calling up the
+.B TRAP
+program.
+.TP
+.B LASTFOLDER
+This variable is assigned to by procmail whenever it is delivering
+to a folder or program. It always contains the name of the last file
+(or program) procmail delivered to. If the last delivery was to
+several directory folders together then $LASTFOLDER will contain
+the hardlinked filenames as a space separated list.
+.TP
+.B MATCH
+This variable is assigned to by procmail whenever it is told to extract
+text from a matching regular expression. It will contain all text
+matching the regular expression past the `\fB\e/\fP' token.
+.TP
+.B SHIFT
+Assigning a positive value to this variable has the same effect as
+the `shift' command in
+.BR sh (1).
+This command is most useful to extract extra arguments passed to procmail
+when acting as a generic mailfilter.
+.TP
+.B INCLUDERC
+Names an rcfile (relative to the current directory) which will be
+included here as if it were part of the current rcfile. Nesting is
+permitted and only limited by systems resources (memory and file
+descriptors). As no checking is done on the permissions or ownership
+of the rcfile, users of
+.B INCLUDERC
+should make sure that only trusted users have write access to the included
+rcfile or the directory it is in. Command line assignments to
+.B INCLUDERC
+have no effect.
+.TP
+.B SWITCHRC
+Names an rcfile (relative to the current directory) to which processing
+will be switched. If the named rcfile doesn't exist or is not a normal
+file or /dev/null then an error will be logged and processing will
+continue in the current rcfile. Otherwise, processing of the current
+rcfile will be aborted and the named rcfile started. Unsetting
+.B SWITCHRC
+aborts processing of the current rcfile as if it had ended at the
+assignment. As with
+.BR INCLUDERC ,
+no checking is done on the permissions or ownership of the rcfile
+and command line assignments have no effect.
+.TP
+.B PROCMAIL_VERSION
+The version number of the running procmail binary.
+.TP
+.B PROCMAIL_OVERFLOW
+This variable will be set to a non-empty value if procmail detects a
+buffer overflow. See the
+.B BUGS
+section below for other details of operation when overflow occurs.
+.TP
+.B COMSAT
+.BR Comsat (8)/ biff (1)
+notification is on by default, it can be turned off by setting this variable
+to `no'. Alternatively the biff-service can be customised by setting it to
+either `service@', `@hostname', or
+`service@hostname'. When not specified it defaults
+to biff@localhost.
+.TP
+.B DROPPRIVS
+If set to `yes' procmail will drop all privileges it might have had (suid or sgid). This is only useful if you want to guarantee that the bottom half of the /etc/procmailrc file is executed on behalf of the recipient.
+.SS "Extended regular expressions"
+The following tokens are known to both the procmail internal egrep and the
+standard
+.BR egrep (1)
+(beware that some egrep implementations include other non-standard
+extensions; in particular, the repetition operator
+.B {
+is not supported by procmail's egrep):
+.TP 1.0i
+.B ^
+Start of a line.
+.TP
+.B $
+End of a line.
+.TP
+.B .
+Any character except a newline.
+.TP
+.B a*
+Any sequence of zero or more a's.
+.TP
+.B a+
+Any sequence of one or more a's.
+.TP
+.B a?
+Either zero or one a.
+.TP
+.B [^-a-d]
+Any character which is
+.B not
+either a dash, a, b, c, d or newline.
+.TP
+.B de|abc
+Either the sequence `de' or `abc'.
+.TP
+.B (abc)*
+Zero or more times the sequence `abc'.
+.TP
+.B \e.
+Matches a single dot; use \e to quote any of the magic characters to get
+rid of their special meaning. See also $\e variable substitution.
+.PP
+These were only samples, of course, any more complex combination is valid
+as well.
+.PP
+The following token meanings are special procmail extensions:
+.TP 1.0i
+\fB^\fP or \fB$\fP
+Match a newline (for multiline matches).
+.TP
+.B ^^
+Anchor the expression at the very start of the search area, or if encountered
+at the end of the expression, anchor it at the very end of the search area.
+.TP
+\fB\e<\fP or \fB\e>\fP
+Match the character before or after a word. They are merely a shorthand
+for `[^a-zA-Z0-9_]', but can also match newlines.
+Since they match actual characters, they are only suitable to delimit
+words, not to delimit inter-word space.
+.TP
+.B \e/
+Splits the expression in two parts. Everything matching the right part
+will be assigned to the MATCH environment variable.
+.SH EXAMPLES
+Look in the
+.BR procmailex (5)
+man page.
+.SH CAVEATS
+Continued lines in an action line that specifies a program always have to end
+in a backslash, even if the underlying shell would not need or want the
+backslash to indicate continuation. This is due to the two pass parsing
+process needed (first procmail, then the shell (or not, depending on
+.BR SHELLMETAS )).
+.PP
+Don't put comments on the regular expression condition lines in a
+recipe, these lines are fed to the internal egrep
+.I literally
+(except for continuation backslashes at the end of a line).
+.PP
+Leading whitespace on continued regular expression condition lines
+is usually ignored (so that they can be indented), but
+.B not
+on continued condition lines that are evaluated according to the
+.BR sh (1)
+substitution rules inside double quotes.
+.PP
+Watch out for deadlocks when doing unhealthy things like forwarding mail
+to your own account. Deadlocks can be broken by proper use of
+.BR LOCKTIMEOUT .
+.PP
+Any default values that procmail has for some environment variables will
+.B always
+override the ones that were already defined. If you really want to
+override the defaults, you either have to put them in the
+.B rcfile
+or on the command line as arguments.
+.PP
+The /etc/procmailrc file cannot change the PATH setting seen by user rcfiles
+as the value is reset when procmail finishes the /etc/procmailrc file. While
+future enhancements are expected in this area, recompiling procmail
+with the desired value is currently the only correct solution.
+.PP
+Environment variables set
+.B inside
+the shell-interpreted-`|' action part of a recipe will
+.B not
+retain their value after the recipe has finished since they are set in a
+subshell of procmail. To make sure the value of an environment variable is
+retained you have to put the assignment to the variable before the leading `|'
+of a recipe, so that it can capture stdout of the program.
+.PP
+If you specify only a `h' or a `b' flag on a delivering
+recipe, and the recipe matches, then, unless the `c' flag is
+present as well, the body respectively the header of the mail will be silently
+lost.
+.SH "SEE ALSO"
+.na
+.nh
+.BR procmail (1),
+.BR procmailsc (5),
+.BR procmailex (5),
+.BR sh (1),
+.BR csh (1),
+.BR mail (1),
+.BR mailx (1),
+.BR uucp (1),
+.BR aliases (5),
+.BR sendmail (8),
+.BR egrep (1),
+.BR regexp (5),
+.BR grep (1),
+.BR biff (1),
+.BR comsat (8),
+.BR lockfile (1),
+.BR formail (1)
+.hy
+.ad
+.SH BUGS
+The only substitutions of environment variables that can be handled by
+procmail itself are of the type $name, ${name}, ${name:-text}, ${name:+text},
+${name-text}, ${name+text}, $\ename, $#, $n, $$, $?, $_, $\- and $=;
+whereby $\ename will be substituted by the
+all-magic-regular-expression-characters-disarmed
+equivalent of $name, $_ by the name of the current rcfile, $\- by
+$LASTFOLDER and $= will contain the score of the last recipe.
+Furthermore, the result of $\ename substitution will never be split on
+whitespace. When the
+.B \-a
+or
+.B \-m
+options are used, $# will expand to the number of arguments so
+specified and "$@" (the quotes are required) will expand to the
+specified arguments. However, "$@" will only be expanded when
+used in the argument list to a program, and
+then only one such occurrence will be expanded.
+.PP
+Unquoted variable expansions performed by procmail are always split on
+space, tab, and newline characters; the IFS variable is not used internally.
+.PP
+Procmail does not support the expansion of `~'.
+.PP
+A line buffer of length $LINEBUF is used when processing the
+.IR rcfile ,
+any expansions that don't fit within this limit will be truncated and
+PROCMAIL_OVERFLOW will be set. If the overflowing line is a condition
+or an action line, then it will be considered failed and procmail will
+continue processing. If it is a variable assignment or recipe start
+line then procmail will abort the entire rcfile.
+.PP
+If the global lockfile has a
+.I relative
+path, and the current directory
+is not the same as when the global lockfile was created, then the global
+lockfile will not be removed if procmail exits at that point (remedy:
+use
+.I absolute
+paths to specify global lockfiles).
+.PP
+If an rcfile has a
+.I relative
+path and when the rcfile is first opened
+.B MAILDIR
+contains a relative path, and if at one point procmail is instructed to
+clone itself and the current directory has changed since the rcfile was
+opened, then procmail will not be able to clone itself (remedy: use an
+.I absolute
+path to reference the rcfile or make sure MAILDIR contains an absolute
+path as the rcfile is opened).
+.PP
+A locallockfile on the recipe that marks the start of a non-forking nested
+block does not work as expected.
+.PP
+When capturing stdout from a recipe into an environment variable, exactly
+one trailing newline will be stripped.
+.PP
+Some non-optimal and non-obvious regexps set MATCH to an incorrect
+value. The regexp can be made to work by removing one or more unneeded
+\&'*', '+', or '?' operators on the left-hand side of the \e/ token.
+.SH MISCELLANEOUS
+If the regular expression contains `\fB^TO_\fP' it will be substituted by
+.na
+.nh
+`\fB(^((Original-)?(Resent-)?(To\h'-\w' 'u' |Cc\h'-\w' 'u' |Bcc)\h'-\w' 'u' |(X-Envelope\h'-\w' 'u' |Apparently(-Resent)?)-To)\h'-\w' 'u' :(.*[^-a-zA-Z0-9_.])?)\fP',
+which should catch all destination specifications containing a specific
+.IR address .
+.hy
+.ad
+.PP
+If the regular expression contains `\fB^TO\fP' it will be substituted by
+.na
+.nh
+`\fB(^((Original-)?(Resent-)?(To\h'-\w' 'u' |Cc\h'-\w' 'u' |Bcc)\h'-\w' 'u' |(X-Envelope\h'-\w' 'u' |Apparently(-Resent)?)-To)\h'-\w' 'u' :(.*[^a-zA-Z])?)\fP',
+which should catch all destination specifications containing a specific
+.IR word .
+.hy
+.ad
+.PP
+If the regular expression contains `\fB^FROM_DAEMON\fP' it will be
+substituted by
+.na
+.nh
+`\fB(^(Mailing-List\h'-\w' 'u' :\h'-\w' 'u' |Precedence\h'-\w' 'u' :.*(junk\h'-\w' 'u' |bulk\h'-\w' 'u' |list)\h'-\w' 'u' |To\h'-\w' 'u' : Multiple recipients of |(((Resent-)?(From\h'-\w' 'u' |Sender)\h'-\w' 'u' |X-Envelope-From)\h'-\w' 'u' :\h'-\w' 'u' |>?From )([^>]*[^(.%@a-z0-9])?(Post(ma?(st(e?r)?\h'-\w' 'u' |n)\h'-\w' 'u' |office)\h'-\w' 'u' |(send)?Mail(er)?\h'-\w' 'u' |daemon\h'-\w' 'u' |m(mdf\h'-\w' 'u' |ajordomo)\h'-\w' 'u' |n?uucp\h'-\w' 'u' |LIST(SERV\h'-\w' 'u' |proc)\h'-\w' 'u' |NETSERV\h'-\w' 'u' |o(wner\h'-\w' 'u' |ps)\h'-\w' 'u' |r(e(quest\h'-\w' 'u' |sponse)\h'-\w' 'u' |oot)\h'-\w' 'u' |b(ounce\h'-\w' 'u' |bs\e.smtp)\h'-\w' 'u' |echo\h'-\w' 'u' |mirror\h'-\w' 'u' |s(erv(ices?\h'-\w' 'u' |er)\h'-\w' 'u' |mtp(error)?\h'-\w' 'u' |ystem)\h'-\w' 'u' |A(dmin(istrator)?\h'-\w' 'u' |MMGR\h'-\w' 'u' |utoanswer))(([^).!\h'-\w' 'u' :a-z0-9][-_a-z0-9]*)?[%@>\\t ][^<)]*(\e(.*\e).*)?)?$([^>]\h'-\w' 'u' |$)))\fP',
+which should catch mails coming from most daemons (how's that for a regular
+expression :\-).
+.hy
+.ad
+.PP
+If the regular expression contains `\fB^FROM_MAILER\fP' it will be
+substituted by
+.na
+.nh
+`\fB(^(((Resent-)?(From\h'-\w' 'u' |Sender)\h'-\w' 'u' |X-Envelope-From)\h'-\w' 'u' :\h'-\w' 'u' |>?From )([^>]*[^(.%@a-z0-9])?(Post(ma(st(er)?\h'-\w' 'u' |n)\h'-\w' 'u' |office)\h'-\w' 'u' |(send)?Mail(er)?\h'-\w' 'u' |daemon\h'-\w' 'u' |mmdf\h'-\w' 'u' |n?uucp\h'-\w' 'u' |ops\h'-\w' 'u' |r(esponse\h'-\w' 'u' |oot)\h'-\w' 'u' |(bbs\e.)?smtp(error)?\h'-\w' 'u' |s(erv(ices?\h'-\w' 'u' |er)\h'-\w' 'u' |ystem)\h'-\w' 'u' |A(dmin(istrator)?\h'-\w' 'u' |MMGR))(([^).!\h'-\w' 'u' :a-z0-9][-_a-z0-9]*)?[%@>\\t ][^<)]*(\e(.*\e).*)?)?$([^>]\h'-\w' 'u' |$))\fP'
+(a stripped down version of `\fB^FROM_DAEMON\fP'),
+which should catch mails coming from most mailer-daemons.
+.hy
+.ad
+.PP
+When assigning boolean values to variables like VERBOSE, DELIVERED or COMSAT,
+procmail accepts as true every string starting with: a non-zero value, `on',
+`y', `t' or `e'. False is every string starting with: a zero value, `off',
+`n', `f' or `d'.
+.PP
+If the action line of a recipe specifies a program, a sole backslash-newline
+pair in it on an otherwise empty line will be converted into a newline.
+.PP
+The regular expression engine built into procmail does not support named
+character classes.
+.SH NOTES
+Since unquoted leading whitespace is generally ignored in the rcfile you can
+indent everything to taste.
+.PP
+The leading `|' on the action line to specify a program or filter is stripped
+before checking for $SHELLMETAS.
+.PP
+Files included with the INCLUDERC directive containing only environment
+variable assignments can be shared with sh.
+.PP
+The current behavior of assignments on the command line to
+.B INCLUDERC
+and
+.B SWITCHRC
+is not guaranteed, has been changed once already, and may be changed
+again or removed in future releases.
+.PP
+For
+.I really
+complicated processing you can even consider calling
+.B procmail
+recursively.
+.PP
+In the old days, the `:0' that marks the beginning of a recipe, had to
+be changed to `:n', whereby `n' denotes the number of conditions that
+follow.
+.SH AUTHORS
+Stephen R. van den Berg
+.RS
+<srb@cuci.nl>
+.RE
+.\".if n .pl -(\n(.tu-1i)
+.rm SH
+.rn Sh SH
+.rm SS
+.rn Ss SS
+.rm TP
+.rn Tp TP
+.rm RS
+.rn Rs RS
+.rm RE
+.rn Re RE