|
mail processor
PROCMAIL(1)
- NAME
- procmail - autonomous mail processor
- SYNOPSIS
procmail [-ptoY] [-f fromwhom]
[parameter=value | rcfile] ...
procmail [-toY] [-f fromwhom] [-a argument]
-d recipient ...
procmail [-ptY] -m [parameter=value] ... rcfile
[argument] ...
procmail -v
- DESCRIPTION
- For a quick start, see NOTES at the end.
Procmail should be invoked automatically over the .forward
file mechanism as soon as mail arrives. Alternatively, when installed by a
system administrator, it can be invoked from within the mailer immediately.
When invoked, it first sets some environment variables to default values,
reads the mail message from stdin until an EOF, separates the body from the
header, and then, if no command line arguments are present, it starts to look
for a file named $HOME/.procmailrc. According to the processing recipes
in this file, the mail message that just arrived gets distributed into the
right folder (and more). If no rcfile is found, or processing of the rcfile
falls off the end, procmail will store the mail in the default system mailbox.
If no rcfiles and no -p have been specified on the command line,
procmail will, prior to reading $HOME/.procmailrc, interpret commands from
/etc/procmailrc (if present). Care must be taken when creating
/etc/procmailrc, because, if circumstances permit, it will be executed
with root privileges (contrary to the $HOME/.procmailrc file of course).
If running suid root or with root privileges, procmail will be able to
perform as a functionally enhanced, backwards compatible mail delivery agent.
Procmail can also be used as a general purpose mail filter, i.e. provisions
have been made to enable procmail to be invoked in a special sendmail rule.
The rcfile format is described in detail in the procmailrc(5)
man page.
The weighted scoring technique is described in detail in the procmailsc(5)
man page.
Examples for rcfile recipes can be looked up in the procmailex(5)
man page.
- Signals
TERMINATE Terminate prematurely and requeue the mail.
HANGUP Terminate prematurely and bounce the mail.
INTERRUPT Terminate prematurely and bounce the mail.
QUIT Terminate prematurely and silently lose the mail.
ALARM Force a timeout (see TIMEOUT).
USR1 Equivalent to a VERBOSE=off.
USR2 Equivalent to a VERBOSE=on.
- OPTIONS
-
-v |
Procmail will print its version number, display its
compile time configuration and exit. |
-p |
Preserve any old environment. Normally procmail clears
the environment upon startup, except for the value of TZ. However, in
any case: any default values will override any preexisting environment
variables, i.e. procmail will not pay any attention to any predefined
environment variables, it will happily overwrite them with its own
defaults. For the list of environment variables that procmail will
preset see the procmailrc(5)
man page. If both -p and -m are specified, the list of preset
environment variables shrinks to just: LOGNAME, HOME, SHELL, ORGMAIL and
MAILDIR. |
-t |
Make procmail fail softly, i.e. if procmail cannot
deliver the mail to any of the destinations you gave, the mail will not
bounce, but will return to the mailqueue. Another delivery-attempt will
be made at some time in the future. |
-f fromwhom |
|
Causes procmail to regenerate the leading `From ' line with
fromwhom as the sender (instead of -f one could use the alternate
and obsolete -r). If fromwhom consists merely of a single `-',
then proc- mail will only update the timestamp on the `From ' line (if
present, if not, it will generate a new one). |
-o |
Instead of allowing anyone to generate `From ' lines,
simply override the fakes. |
-Y |
Assume traditional Berkeley mailbox format, ignore any
Content-Length: fields. |
-a argument |
|
This will set $1 to be equal to argument. It can be used to
pass meta information along to procmail. This is typically done by
passing along the $@x information from the sendmail mailer rule. |
-d recipient ... |
|
This turns on explicit delivery mode, delivery will be to the local
user recipient. This, of course, only is possible if procmail has
root privileges (or if procmail is already running with the recipient's
euid and egid). Procmail will setuid to the intended recipients and
delivers the mail as if it were invoked by the recipient with no
arguments (i.e. if no rcfile is found, delivery is like ordinary mail).
This option is incompatible with -p. |
-m |
Turns procmail into a general purpose mail filter. In
this mode one rcfile must be specified on the com- mand line. After the
rcfile, procmail will accept an unlimited number of arguments. If the
rcfile is an absolute path starting with /etc/procmailrcs/
without backward references (i.e. the parent directory cannot be
mentioned) procmail will, only if no security vio- lations are found,
take on the identity of the owner of the rcfile (or symbolic link). For
some advanced usage of this option you should look in the
EXAMPLES section below. |
- ARGUMENTS
- Any arguments containing an '=' are considered to be environment variable
assignments, they will all be evaluated after the default values have been
assigned and before the first rcfile is opened.
Any other arguments are presumed to be rcfile paths (either absolute, or if
they start with `./' relative to the current directory; any other
relative path is relative to $HOME, unless the -m option has been
given, in which case all relative paths are relative to the current
directory); procmail will start with the first one it finds on the command
line. The following ones will only be parsed if the preceding ones have a not
matching HOST-directive entry, or in case they should not exist.
If no rcfiles are specified, it looks for $HOME/.procmailrc. If not
even that can be found, processing will continue according to the default
settings of the environment variables and the ones specified on the command
line.
- EXAMPLES
- Examples for rcfile recipes can be looked up in the procmailex(5)
man page. A small sample rcfile can be found in the NOTES section
below.
Skip the rest of this EXAMPLES section unless you are a system
administrator who is vaguely familiar with sendmail.cf syntax.
The -m option is typically used when procmail is called from within
a rule in the sendmail.cf file. In order to be able to do this it is
convenient to create an extra `procmail' mailer in your sendmail.cf file (in
addition to the perhaps already present `local' mailer that starts up
procmail). To create such a `procmail' mailer I'd suggest something like: Mprocmail, P=/usr/bin/procmail, F=mSDFMhun, S=11, R=21,
A=procmail -m $h $g $u This enables you to use rules like the
following (most likely in ruleset 0) to filter mail through the procmail
mailer (please note the leading tab to continue the rule, and the tab to
separate the comments): R$*<@some.where>$*
$#procmail $@/etc/procmailrcs/some.rc $:$1@some.where.procmail$2
R$*<@$*.procmail>$*
$1<@$2>$3 Already filtered, map back And
/etc/procmailrcs/some.rc could be as simple as: :0 # sink all junk mail
* ^Subject:.*junk
/dev/null
:0 # pass along all other mail
! -oi -f "$@" Do watch out when sending mail from within the
/etc/procmailrcs/some.rc file, if you send mail to addresses which match the
first rule again, you could be creating an end- less mail loop.
- FILES
-
/etc/passwd |
to set the recipient's LOGNAME, HOME and SHELL variable
defaults |
/var/mail/$LOGNAME |
system mailbox; both the system mailbox and the immediate
directory it is in will be created everytime procmail starts and either
one is not present |
/etc/procmailrc |
initial global rcfile |
/etc/procmailrcs/ |
special privileges path for rcfiles |
$HOME/.procmailrc |
default rcfile |
/var/mail/$LOGNAME.lock |
lockfile for the system mailbox (not automatically used
by procmail, unless $DEFAULT equals /var/mail/$LOGNAME and procmail is
delivering to $DEFAULT) |
/usr/sendmail |
default mail forwarder
|
_????`hostname` |
temporary `unique' zero-length files created by
procmail |
- SEE ALSO
- procmailrc(5),
procmailsc(5),
procmailex(5),
sh(1), csh(1), mail(1), mailx(1), binmail(1), uucp(1), aliases(5),
sendmail(8), egrep(1), grep(1), biff(1), comsat(8),
lockfile(1),
formail(1),
cron(1)
- DIAGNOSTICS
-
Autoforwarding mailbox found |
|
The system mailbox had its suid or sgid bit set, procmail terminates
with EX_NOUSER assuming that this mailbox must not be delivered
to. |
Bad substitution of "x" |
|
Not a valid environment variable name specified. |
Closing brace unexpected |
|
There was no corresponding opening brace (nesting block). |
Conflicting options |
|
Not all option combinations are useful |
Conflicting x suppressed |
|
Flag x is not compatible with some other flag on this recipe. |
Couldn't create "x" |
|
The system mailbox was missing and could not/will not be
created. |
Couldn't determine implicit lockfile from "x" |
|
There were no `>>' redirectors to be found, using simply
`$LOCKEXT' as locallockfile. |
Couldn't unlock "x" |
|
Lockfile was already gone, or write permission to the directory were
the lockfile is has been denied. |
Deadlock attempted on "x" |
|
The locallockfile specified on this recipe is equal to a still
active $LOCKFILE. |
Denying special privileges for "x" |
|
Procmail will not take on the identity that comes with the rcfile
because a security violation was found (e.g. -p or variable
assignments on the command line) or procmail had insufficient privileges
to do so. |
Enforcing stricter permissions on "x" |
|
The system mailbox of the recipient was found to be unsecured,
procmail secured it. |
Error while writing to "x" |
|
Nonexistent subdirectory, no write permission, pipe died or disk
full. |
Exceeded LINEBUF |
|
Buffer overflow detected, LINEBUF was too small, memory might be
corrupted. |
Excessive output quenched from "x" |
|
The program or filter "x" tried to produce too much output for the
current LINEBUF, the rest was discarded. |
Extraneous x ignored |
|
The action line of this recipe makes flag x meaningless. |
Failed forking "x" |
|
Process table is full (and NORES- RETRY has been exhausted). |
Failed to execute "x" |
|
Program not in path, or not executable. |
Forced unlock denied on "x" |
|
No write permission in the directory where lockfile "x" resides, or
more than one procmail trying to force a lock at exactly the same
time. |
Forcing lock on "x" |
|
Lockfile "x" is going to be removed by force because of a timeout
(see also: LOCKTIMEOUT). |
Incomplete recipe |
|
The start of a recipe was found, but it stranded in an EOF. |
Insufficient privileges |
|
Procmail either needs root privileges, or must have the right (e)uid
and (e)gid to run in delivery mode. The mail will bounce. |
Invalid regexp "x" |
|
The regular expression "x" contains errors (most likely some missing
or extraneous parens). |
Kernel-lock failed |
|
While trying to use the kernel-supported locking calls, one of them
failed (usually indicates an OS error), procmail ignores this error and
proceeds. |
Kernel-unlock failed |
|
See above. |
Lock failure on "x" |
|
Can only occur if you specify some real weird (and illegal)
lockfilenames or if the lockfile could not be created because of
insufficient permissions or nonexistent subdi- rectories. |
Lost "x" |
|
Procmail tried to clone itself but could not find back rcfile "x"
(it either got removed or it was a relative path and you changed
directory since procmail opened it last time). |
Missing closing brace |
|
A nesting block was started, but never finished. |
Missing name |
|
The -f option needs an extra argument.
|
Missing argument |
|
You specified the -a option but forgot the argument. |
Missing rcfile |
|
You specified the -m option, procmail expects the name of an rcfile
as argument. |
Missing recipient |
|
You specified the -d option or called procmail under a different
name, it expects one or more recipients as arguments. |
No space left to finish writing "x" |
|
The filesystem containing "x" does not have enough free space to
permit delivery of the message to the file. |
Out of memory |
|
The system is out of swap space (and NORESRETRY has been
exhausted). |
Processing continued |
|
The unrecognised options on the command line are ignored, proceeding
as usual. |
Program failure (nnn) of "x" |
|
Program that was started by procmail returned nnn instead of
EXIT_SUCCESS (=0); if nnn is negative, then this is the signal the
program died on. |
Renaming bogus "x" into "x" |
|
The system mailbox of the recipient was found to be bogus, procmail
performed evasive actions. |
Skipped: "x" |
|
Couldn't do anything with "x" in the rcfile (syntax error), ignoring
it. |
Suspicious rcfile "x" |
|
The owner of the rcfile was not the recipient or root, or the
directory that contained it was world writable (the rcfile was not
used). |
Terminating prematurely whilst waiting for ... |
|
Procmail received a signal while it was waiting for ... |
Quota exceeded while writing "x" |
|
The filesize quota for the recipient on the filesystem containing
"x" does not permit delivering the message to the file. |
Timeout, terminating "x" |
|
Timeout has occurred on program or filter "x". |
Timeout, was waiting for "x" |
|
Timeout has occurred on program, filter or file "x". If it was a
program or filter, then it didn't seem to be running anymore. |
Truncated file to former size |
|
The file could not be delivered to successfully, so the file was
truncated to its former size. |
Truncating "x" and retrying lock |
|
"x" does not seem to be a valid filename or the file is not
empty. |
Rescue of unfiltered data succeeded/failed |
|
A filter returned unsuccessfully, procmail tried to get back the
original text. |
Unexpected EOL |
|
Missing closing quote, or trying to escape EOF. |
Unknown user "x" |
|
The specified recipient does not have a corresponding
uid. |
- EXTENDED DIAGNOSTICS
- Extended diagnostics can be turned on and off through setting the VERBOSE
variable.
[pid] time & date |
|
Procmail's pid and a timestamp. Generated whenever procmail logs a
diagnostic and at least a second has elapsed since the last
timestamp. |
Acquiring kernel-lock |
|
Procmail now tries to kernel-lock the most recently opened file
(descriptor). |
Assigning "x" |
|
Environment variable assignment. |
Assuming identity of the recipient, VERBOSE=off |
|
Dropping all privileges (if any), implicitly turns off extended
diagnostics. |
Bypassed locking "x" |
|
The mail spool directory was not accessible to procmail, it relied
solely on kernel locks. |
Executing "x" |
|
Starting program "x". If it is started by procmail directly (without
an intermediate shell), procmail will show where it separated the
arguments by inserting commas. |
HOST mismatched "x" |
|
This host was called "x", HOST contained something else. |
Locking "x" |
|
Creating lockfile "x". |
Linking to "x" |
|
Creating a hardlink between directory folders. |
Match on "x" |
|
Condition matched. |
Matched "x" |
|
Assigned "x" to MATCH. |
No match on "x" |
|
Condition didn't match, recipe skipped. |
Notified comsat: "$LOGNAME@offset:file" |
|
Sent comsat/biff a notice that mail arrived for user $LOGNAME at
`offset' in `file'. |
Opening "x" |
|
Opening file "x" for appending. |
Rcfile: "x" |
|
Rcfile changed to "x". |
Reiterating kernel-lock |
|
While attempting several locking methods, one of these failed.
Procmail will reiterate until they all succeed in rapid
succession. |
Score: added newtotal "x" |
|
This condition scored `added' points, which resulted in a `newtotal'
score. |
Unlocking "x" |
|
Removing lockfile "x" again. |
- WARNINGS
- You should create a shell script that uses lockfile(1)
before invoking your mail shell on any mailbox file other than the system
mailbox (unless of course, your mail shell uses the same lockfiles (local or
global) you specified in your rcfile).
In the unlikely event that you absolutely need to kill procmail before it
has finished, first try and use the regular kill command (i.e. not kill
-9, see the subsection Signals for suggestions), otherwise some
lockfiles might not get removed.
Beware when using the -t option, if procmail repeatedly is unable to
deliver the mail (e.g. due to an incorrect rcfile), the system mailqueue could
fill up. This could aggravate both the local postmaster and other users.
The /etc/procmailrc file might be executed with root privileges, so
be very careful of what you put in it. SHELL will be equal to that of
the current recipient, so if procmail has to invoke the shell, you'd better
set it to some safe value first. See also: DROPPRIVS.
Keep in mind that if chown(1) is permitted on files in
/etc/procmailrcs/, that they can be chowned to root (or anyone else) by
their current owners. For maximum security, make sure this directory is
executable to root only.
- BUGS
- After removing a lockfile by force, procmail waits $SUSPEND seconds before
creating a new lockfile so that another process that decides to remove the
stale lockfile will not remove the newly created lock by mistake.
Procmail uses the regular TERMINATE signal to terminate any runaway filter,
but it does not check if the filter responds to that signal and it only sends
it to the filter itself, not to any of the filter's children.
A continued Content-Length: field is not handled correctly.
- MISCELLANEOUS
- If there is an existing Content-Length: field in the head- er of
the mail and the -Y option is not specified, proc- mail will trim the field to
report the correct size. Procmail does not change the fieldwidth.
If there is no Content-Length: field or the -Y option has
been specified and procmail appends to regular mailfold- ers, any lines in the
body of the message that look like postmarks are prepended with `>'
(disarms bogus mailhead- ers). The regular expression that is used to search
for these postmarks is: `\nFrom ' If the destination name used in explicit delivery
mode is not in /etc/passwd, procmail will proceed as if explicit delivery mode
was not in effect. If not in explicit de- livery mode and should the uid
procmail is running under, have no corresponding /etc/passwd entry, then HOME
will default to /, LOGNAME will default to #uid and SHELL will default to
/bin/sh.
When in explicit delivery mode, procmail will generate a leading `From '
line if none is present. If one is al- ready present procmail will leave it
intact. If procmail is not invoked with one of the following user or group ids
: root, daemon, uucp, mail, x400, network, list, slist, lists or news, but
still has to generate or accept a new `From ' line, it will generate an
additional `>From ' line to help distinguish fake mails.
For security reasons procmail will only use an absolute or $HOME-relative
rcfile if it is either owned by the recipi- ent or root and not world
writable, or if the directory it is contained in is not world writable.
If /var/mail/$LOGNAME is a bogus mailbox (i.e. does not belong to the
recipient, is unwritable, is a symbolic link or is a hard link), procmail will
upon startup try to re- name it into a file starting with `BOGUS.' and ending
in an inode-sequence-code. If this turns out to be impossi- ble,
ORGMAIL will have no initial value, and hence will inhibit delivery
without a proper rcfile.
If /var/mail/$LOGNAME already is a valid mailbox, but has got too loose
permissions on it, procmail will correct this. To prevent procmail from doing
this make sure the u+x bit is set.
When delivering to directories (or to MH folders) you don't need to
use lockfiles to prevent several concurrent- ly running procmail programs from
messing up.
Delivering to MH folders is slightly more time consuming than delivering to
normal directories or mailboxes, be- cause procmail has to search for the next
available number (instead of having the filename immediately available).
On general failure procmail will return EX_CANTCREAT, un- less option
-t is specified, in which case it will return EX_TEMPFAIL.
To make `egrepping' of headers more consistent, procmail concatenates all
continued header fields; but only inter- nally. When delivering the mail, line
breaks will appear as before.
If procmail is called under a name not starting with `procmail' (e.g. if it
is linked to another name and in- voked as such), it comes up in explicit
delivery mode, and expects the recipients' names as command line arguments (as
if -d had been specified).
Comsat/biff notifications are done using udp. They are sent off once when
procmail generates the regular logfile entry. The notification messages have
the following ex- tended format (or as close as you can get when final de-
livery was not to a file): $LOGNAME@offset_of_message_in_mailbox:absolute_path_to_mailbox Whenever
procmail itself opens a file to deliver to, it consistently uses the following
kernel locking strategies: fcntl(2).
Procmail is NFS-resistant and eight-bit clean.
- NOTES
- Calling up procmail with the -h or -? options will cause it to display a
command-line help and recipe flag quick- reference page. There exists an
excellent newbie FAQ about mailfilters (and procmail in particular), it is
being maintained by Nancy McGough <nancym@ii.com> and can be obtained by
send- ing a mail to mail-server@rtfm.mit.edu with the following in the body:
send usenet/news.answers/mail/filtering-faq If procmail is
not installed globally as the default mail delivery agent (ask your system
administrator), you have to make sure it is invoked when your mail arrives. In
this case your $HOME/.forward (beware, it has to be world readable) file
should contain the line below. Be sure to include the single and double
quotes, and it must be an absolute path. The #YOUR_USERNAME is not actually a
pa- rameter that is required by procmail, in fact, it will be discarded by sh
before procmail ever sees it; it is howev- er a necessary kludge against
overoptimising sendmail pro- grams: "|exec /usr/bin/procmail" Procmail can also be invoked to
postprocess an already filled system mailbox. This can be useful if you don't
want to or can't use a $HOME/.forward file (in which case the following script
could periodically be called from within cron(1), or whenever you start
reading mail): #!/bin/sh
ORGMAIL=/var/mail/$LOGNAME
if cd $HOME &&
test -s $ORGMAIL &&
lockfile -r0 -l1024 .newmail.lock 2>/dev/null
then
trap "rm -f .newmail.lock" 1 2 3 13 15
umask 077
lockfile -l1024 -ml
cat $ORGMAIL >>.newmail &&
cat /dev/null >$ORGMAIL
lockfile -mu
formail -s procmail <.newmail &&
rm -f .newmail
rm -f .newmail.lock
fi
exit 0 A sample small $HOME/.procmailrc: PATH=/bin:/usr/bin:/usr/bin
MAILDIR=$HOME/Mail #you'd better make sure it exists
DEFAULT=$MAILDIR/mbox #completely optional
LOGFILE=$MAILDIR/from #recommended
:0:
* ^From.*berg
from_me
:0
* ^Subject:.*Flame
/dev/null Other examples for rcfile recipes can be looked up in
the procmailex(5)
man page.
- SOURCE
- This program is part of the procmail mail-processing-package
(v3.11pre7 1997/04/28) available at your nearest USENET comp.sources.misc
archive, or at ftp.informatik.rwth-aachen.de as
pub/packages/procmail/procmail.tar.gz.
- MAILINGLIST
- There exists a mailinglist for questions relating to any program in the
procmail package:
<procmail@informatik.rwth-aachen.de>
for submitting questions/answers.
<procmail-request@informatik.rwth-aachen.de>
for subscription requests. If you would like to stay
informed about new versions and official patches send a subscription request
to procmail-announce-request@informatik.rwth-aachen.de (this is
a readonly list).
- AUTHOR
- Stephen R. van den Berg <srb@cuci.nl>
1997/04/11
SPEEDEX サポートポリシー
Copyright @ Cyber Vision Hosting Co., Ltd. All rights reserved.
株式会社サイバービジョンホスティング提供サービス一覧
再販売用レンタルサーバーのSPEEDEX | VPS(仮想専用サーバー) | 共用サーバー | 専用サーバー | 独自ドメイン取得・運用 | SSLサーバー証明書 | ワイルドカードサーバー証明書
WindowsデータバックアップのDataShelter | 事業者向け再販売用Windowsデータバックアップ | クリエイティブワークの検索エンジン
|