.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "YAMPLE 1" .TH YAMPLE 1 "2004-01-13" "perl v5.8.2" "User Contributed Perl Documentation" .SH "NAME" Yample \- Yet Another Mail Processing Language. .SH "DESCRIPTION" .IX Header "DESCRIPTION" Yample is an \s-1MDA\s0 \- a mail delivery agent. It accepts a message via standard input and stores this message in a maildir or in a mbox. .PP 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. .PP Look at the following lines, taken from \*(L"man procmailex\*(R"; .PP :0 c * ^From.*peter * ^Subject:.*compilers ! william@somewhere.edu .PP .Vb 2 \& :0 A \& petcompil .Ve .PP This can be implemented like this in Yample; .PP sender(peter) and subject(compilers) unseen resend(william@somewhere.edu) sender(peter) and subject(compilers) mbox(petcompil) .SH "OPTIONS" .IX Header "OPTIONS" .IP "\fB\-\-help\fR" 5 .IX Item "--help" Help! .IP "\fB\-\-mailbase " 5 .IX Item "--mailbase " This option is prepended to any destinations you have. Default is ~/Maildir/. .IP "\fB\-\-logfile\fR" 5 .IX Item "--logfile" Yamples logfile. Default is ~/.yample/log. .IP "\fB\-\-loglevel <0\-4\fR>" 5 .IX Item "--loglevel <0-4>" Loglevel. 4 \- Debug, 3 \- info, 2 \- warnings, 1 \- errors, 0 \- nothing. .IP "\fB\-\-spamassassin\fR" 5 .IX Item "--spamassassin" Load Mail::Spamassassin and run the mail through it. .IP "\fB\-\-spamc\fR" 5 .IX Item "--spamc" Run the message through spamc. Yample will look for spamc in the \f(CW$PATH\fR unless you set \fB\-\-spamc\-path\fR. .IP "\fB\-\-spamc\-path\fR /path/to/spamc" 5 .IX Item "--spamc-path /path/to/spamc" Where spamc resides. .IP "\fB\-\-dubdb " 5 .IX Item "--dubdb " The message id database \- used for duplicate suppression. .IP "\fB\-\-rules " 5 .IX Item "--rules " The rule file. .SH "FILES" .IX Header "FILES" .Sh "~/.yample/rules" .IX Subsection "~/.yample/rules" This file contains the rules which Yample uses to sort mail. Yample reads the mail from \s-1STDIN\s0 and then processes the rules, one by one. .PP 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. .PP 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: \*(L"subject((.*)) and rcpt(user@foo.org): reject(Your message with subject \f(CW$1\fR was rejected)\*(R". Cool, eh? .PP \&\s-1NOTE:\s0 We replace \*(L"/\*(R" and \*(L".\*(R" with \*(L"_\*(R" in grouped strings to make sure there won't be any funny business. .IP "Yample::Rules" 5 .IX Item "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. .IP "\fIdup()\fR" 5 .IX Item "dup()" Detects duplicates. .IP "\fIrcpt()\fR" 5 .IX Item "rcpt()" The rcpt rule matches against the To\- and Cc\-headers. .IP "\fIsender()\fR" 5 .IX Item "sender()" The sender rule matches against the From\-header. .IP "\fIsubject()\fR" 5 .IX Item "subject()" Matches on the subject of the message. .IP "\fIlist()\fR" 5 .IX Item "list()" If Yample can load Mail::Listdetect then \fIlist()\fR can be used to match against the name of the mailing list (unless the mailing list server is completely lame). .Sp You can use this rule like this: .Sp list((.*)): maildir(.lists.$1) .IP "\fIhead()\fR" 5 .IX Item "head()" Match against a arbitrary header. Note the caret (^) .Sp head(^X\-Spam\-Flag: \s-1YES\s0): maildir(.junk.spam) head(^X\-Infected:): maildir(.junk.virii) .IP "\fIspam()\fR" 5 .IX Item "spam()" If Yample loads Spamassassin (and runs the message through it) you can use \fIspam()\fR to determine the status of the message. .IP "\fIperl()\fR" 5 .IX Item "perl()" Run arbitrary perl code. Unless you are some sort of pervert you would not use this for anything but testing and debugging Yample. .IP "Yample::Actions" 5 .IX Item "Yample::Actions" Action dispatcher class. All the targets are defined here. .IP "\fImaildir()\fR" 5 .IX Item "maildir()" Stores the message in a UW-style maildir more or less as defined per \&\s-1RFCXXXX\s0. .IP "\fImbox()\fR" 5 .IX Item "mbox()" Delivers mail to a standard Unix mailbox. .Sp Parameters: The mailbox where the message is to be delivered. .IP "\fIresend()\fR" 5 .IX Item "resend()" Parameters: Where the message is to be forwarded. .IP "\fIreject()\fR" 5 .IX Item "reject()" Reject the message. This normally forces your mail server to create a bounce and mail this to the original sender. .Sp Parameters: Error message. This message will probably be included in the bounce generated. .IP "\fIignore()\fR" 5 .IX Item "ignore()" Ignore the message silently. .Sp Parameters: none .IP "\fIreply()\fR" 5 .IX Item "reply()" Reply to the message. .Sp Parameters: The body of the reply. .IP "\fIpipe()\fR" 5 .IX Item "pipe()" Parameters: The command which is message is to be piped into. Executed through \*(L"/bin/sh \-c\*(R". .Sh "~/.yample/dupdb" .IX Subsection "~/.yample/dupdb" Yamples database of message IDs. Yample uses this to supress dupicate messages (see \fIdup()\fR rules). .Sh "~/.yample/log" .IX Subsection "~/.yample/log" Your own personal logfile. You might want to use logrotate or similar programs to make sure it does not grow to big. .Sh "~/.forward" .IX Subsection "~/.forward" Usually, your mail server looks for a file in your home directory called \&\*(L".forward\*(R". This file contains information how your mail server should deliver your mail. If you want Yample as your \s-1MDA\s0 your .forward should look like this: |/full/path/to/yample .SH "EXAMPLES" .IX Header "EXAMPLES" # throw away virii head(^X\-Infected:): \fIignore()\fR .PP # throw away spam with a score higher than 8 head(^X\-Spam\-Score: \ed+\e.\ed+ \e(\e+{8,}\e) .PP # The rest of the spam, tagged by spamassassin head(^X\-Spam\-Flag: \s-1YES\s0): maildir(.junk.spam) .PP \&\fIdup()\fR: maildir(.junk.duplicates) .PP # auto-sort lists \- requires Mail::Listdetect list((.*)): maildir(.lists.$1) .PP sender(@fjase.net) and subject(Backup report): maildir(.backup_reports) .PP # catch-all .PP \&\fIperl\fR\|(1): \fImaildir()\fR .SH "VERSION" .IX Header "VERSION" Yample 0.30 .SH "AUTHOR" .IX Header "AUTHOR" Per Andreas Buer .SH "PREREQUSITES" .IX Header "PREREQUSITES" Yamples needs the following perl modules. Please download from \s-1CPAN\s0, Yamples home page or other sources. .PP Mail::Internet Mail::Send Text::Balanced .PP Yample also uses these modules \- but they are in the Perl distribution so they should always be there. .PP Pod::Usage \&\s-1POSIX\s0 Sys::Hostname IO::File IPC::Open2 .SH "BUGS" .IX Header "BUGS" Yample with Spamassassin, Mail::ListDetector and the other bells and whistles is quite heavy. .PP Please report bugs and functionality requests to the author. .PP Yample lacks (as of now) \s-1LMTP\s0 and \s-1IMAP\s0 support. Both should be fairly easy to implement. .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (C) 2003 Per Andreas Buer .PP This is free software; see the source for copying conditions. There is \&\s-1NO\s0 warranty; not even for \s-1MERCHANTABILITY\s0 or \s-1FITNESS\s0 \s-1FOR\s0 A \s-1PARTICULAR\s0 \&\s-1PURPOSE\s0. .SH "SEE ALSO" .IX Header "SEE ALSO" Mail::Internet (3), Mail::SpamAssassin (3), Mail::ListDetector (3).