NAME
Yample - Yet Another Mail Processing Language.
DESCRIPTION
Yample is an MDA - a mail delivery agent. It accepts a message via
standard input and stores this message in a maildir or in a mbox.
Yample tries to incorporate the power of Perl and Mail::Internet,
Mail::Spamassassin and the other Mail modules whilst maintaining an
friendly syntax. Yample was written due to a personal conflict with
Procmails syntax.
Look at the following lines, taken from "man procmailex";
:0 c * ^From.*peter * ^Subject:.*compilers ! william@somewhere.edu
:0 A
petcompil
This can be implemented like this in Yample;
sender(peter) and subject(compilers) unseen
resend(william@somewhere.edu) sender(peter) and subject(compilers)
mbox(petcompil)
OPTIONS
--help
Help!
--mailbase <maildir>
This option is prepended to any destinations you have. Default is
~/Maildir/.
--logfile
Yamples logfile. Default is ~/.yample/log.
--loglevel <0-4>
Loglevel. 4 - Debug, 3 - info, 2 - warnings, 1 - errors, 0 -
nothing.
--spamassassin
Load Mail::Spamassassin and run the mail through it.
--spamc
Run the message through spamc. Yample will look for spamc in the
$PATH unless you set --spamc-path.
--spamc-path /path/to/spamc
Where spamc resides.
--dubdb <file>
The message id database - used for duplicate suppression.
--rules <file>
The rule file.
FILES
~/.yample/rules
This file contains the rules which Yample uses to sort mail. Yample
reads the mail from STDIN and then processes the rules, one by one.
The rules consists of two parts; condition(s) and target. There is an
implicit if .. then .. else between every rule. Please see the examples
futher down.
In the conditions which take a regular expression as a parameter you
can use grouping to extract parts of the text and utilize this in the
sorting. Like this: "subject((.*)) and rcpt(user@foo.org): reject(Your
message with subject $1 was rejected)". Cool, eh?
NOTE: We replace "/" and "." with "_" in grouped strings to make sure
there won’t be any funny business.
Yample::Rules
This package contains subroutines which handle the individual
rules. The rules are transformed into perl code which will call
these methods to decide what to do with the message.
dup()
Detects duplicates.
rcpt()
The rcpt rule matches against the To- and Cc-headers.
sender()
The sender rule matches against the From-header.
subject()
Matches on the subject of the message.
list()
If Yample can load Mail::Listdetect then list() can be used to
match against the name of the mailing list (unless the mailing
list server is completely lame).
You can use this rule like this:
list((.*)): maildir(.lists.$1)
head()
Match against a arbitrary header. Note the caret (^)
head(^X-Spam-Flag: YES): maildir(.junk.spam)
head(^X-Infected:): maildir(.junk.virii)
spam()
If Yample loads Spamassassin (and runs the message through it) you
can use spam() to determine the status of the message.
perl()
Run arbitrary perl code. Unless you are some sort of pervert you
would not use this for anything but testing and debugging Yample.
Yample::Actions
Action dispatcher class. All the targets are defined here.
maildir()
Stores the message in a UW-style maildir more or less as defined
per RFCXXXX.
mbox()
Delivers mail to a standard Unix mailbox.
Parameters: The mailbox where the message is to be delivered.
resend()
Parameters: Where the message is to be forwarded.
reject()
Reject the message. This normally forces your mail server to
create a bounce and mail this to the original sender.
Parameters: Error message. This message will probably be included
in the bounce generated.
ignore()
Ignore the message silently.
Parameters: none
reply()
Reply to the message.
Parameters: The body of the reply.
pipe()
Parameters: The command which is message is to be piped into.
Executed through "/bin/sh -c".
~/.yample/dupdb
Yamples database of message IDs. Yample uses this to supress dupicate
messages (see dup() rules).
~/.yample/log
Your own personal logfile. You might want to use logrotate or similar
programs to make sure it does not grow to big.
~/.forward
Usually, your mail server looks for a file in your home directory
called ".forward". This file contains information how your mail server
should deliver your mail. If you want Yample as your MDA your .forward
should look like this: │/full/path/to/yample
EXAMPLES
# throw away virii head(^X-Infected:): ignore()
# throw away spam with a score higher than 8 head(^X-Spam-Score:
\d+\.\d+ \(\+{8,}\)
# The rest of the spam, tagged by spamassassin head(^X-Spam-Flag: YES):
maildir(.junk.spam)
dup(): maildir(.junk.duplicates)
# auto-sort lists - requires Mail::Listdetect list((.*)):
maildir(.lists.$1)
sender(@fjase.net) and subject(Backup report): maildir(.backup_reports)
# catch-all
perl(1): maildir()
VERSION
Yample 0.30
AUTHOR
Per Andreas Buer <perbu (at) linpro.no>
PREREQUSITES
Yamples needs the following perl modules. Please download from CPAN,
Yamples home page or other sources.
Mail::Internet Mail::Send Text::Balanced
Yample also uses these modules - but they are in the Perl distribution
so they should always be there.
Pod::Usage POSIX Sys::Hostname IO::File IPC::Open2
BUGS
Yample with Spamassassin, Mail::ListDetector and the other bells and
whistles is quite heavy.
Please report bugs and functionality requests to the author.
Yample lacks (as of now) LMTP and IMAP support. Both should be fairly
easy to implement.
COPYRIGHT
Copyright (C) 2003 Per Andreas Buer
This is free software; see the source for copying conditions. There is
NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
SEE ALSO
Mail::Internet (3), Mail::SpamAssassin (3), Mail::ListDetector (3).