Penguin

Differences between version 10 and previous revision of SpamAssassin.

Other diffs: Previous Major Revision, Previous Author, or view the Annotated Edit History

Newer page: version 10 Last edited on Thursday, November 11, 2004 9:45:05 pm by AristotlePagaltzis Revert
Older page: version 9 Last edited on Thursday, November 11, 2004 6:13:58 pm by DrewBroadley Revert
@@ -1,115 +1,116 @@
-SpamAssassin is a neat mail filter that tags incoming mails it thinks are spam. It can be set up to be a bit nastier about this, but the default is good enough .  
-  
- You can use procmail(1) to run SpamAssassin, or you might want to use MailScanner to run it on all your incoming mail. You might even want to plug VipulsRazor into it.  
-  
-Its homepage can be found [here|http://spamassassin.org].  
-  
-SpamAssassin is written in [Perl] and is licensed under the same license as Perl itself
+[ SpamAssassin | http://spamassassin.apache.org] is a neat [Email] filter that tags incoming mails it thinks are spam. Its aggressiveness can be configured, and it comes with a decent default level. It's written in [Perl] and is licensed under the same license as Perl itself . You can use procmail(1) to run SpamAssassin, or you might want to use MailScanner to run it on all your incoming mail. You might even want to plug VipulsRazor into it. 
  
 (Note, this product will assassinate [Spam], but will leave [SPAM] well alone!) 
  
 ----- 
  
-!How to make SpamAssassin run on your local e-mail machine (with [Evolution] in mind) 
+! ! How to make SpamAssassin run on your local e-mail machine (with [Evolution] in mind) 
  
 * get and install SpamAssassin, test that it works by piping a good email and a spam email through it 
-* check that fetchmail(1) works, write a .fetchmailrc file  
-* check that procmail(1) works, write a .procmailrc file 
+* check that fetchmail(1) works, write a <tt> .fetchmailrc</tt> file  
+* check that procmail(1) works, write a <tt> .procmailrc</tt> file 
 * disable the regular pop mailboxes in Evolution 
 * add a new "local delivery" mailbox to Evolution 
-* write a tiny script I called " getmail" that does " fetchmail -m procmail" and make sure that it gets your email from the POP3 server correctly  
-* add getmail to your crontab to run every 5 minutes  
-* add a filter rule to Evolution: if specific header X-Spam-Flag = YES, drop the email in my Spam folder 
+* write a tiny script I called <tt> getmail</tt> that does <tt> fetchmail -m procmail</tt> and make sure that it gets your email from the POP3 server correctly  
+* add <tt> getmail</tt> to your crontab to run every 5 minutes  
+* add a filter rule to Evolution: if specific header <tt> X-Spam-Flag = YES</tt> , drop the email in my Spam folder 
  
-  
- .fetchmailrc: 
+<tt> .fetchmailrc</tt> ::  
+ <verbatim>  
  poll mail.myisp.co.nz protocol POP3 
  user "pop3user" password "secret" is user "localuser" here mda "/usr/bin/procmail"; 
+ </verbatim>  
  
-.procmailrc 
+<tt> .procmailrc</tt>::  
+ <verbatim>  
+ # correct incoming messages for programs like Evolution and mail  
  :0 fhw 
  | formail -I "From " -a "From " 
  
  :0fw 
  | spamassassin 
+ </verbatim>  
  
-Note: older versions of spamassassin needed a "-P" option to tell it to read from a pipe, but that is now the default.  
-The formail line corrects incoming messages for programs like evolution and mail by readding the From line.  
-  
- ~/bin/getmail:  
- 
+<tt> ~/bin/getmail</tt>: :  
+ <verbatim>  
  #!/bin/bash 
  /usr/bin/fetchmail >> ~/log/fetchmail 
+ </verbatim>  
  
-crontab:  
- 
+crontab: :  
+ <verbatim>  
  */5 * * * * /home/localuser/bin/getmail 
+ </verbatim>  
  
 ---- 
-!!The ClamAV Plugin  
  
-This plugin submits the entire email to a locally running [ ClamAV] server for virus detection. If a virus is found, it returns a positive return code to indicate spam and sets the header "X-Spam-Virus: Yes ($virusname)".  
+!! The ClamAV Plugin  
  
-!Code  
+This plugin submits the entire email to a locally running [ClamAV] server for virus detection. If a virus is found, it returns a positive return code to indicate spam and sets the header <tt>X-Spam-Virus: Yes ($virusname)</tt>. If you'd like to sort virus emails to a separate folder, create a rule looking for this header.  
  
-----  
-''clamav.cf''  
- loadplugin ClamAV clamav.pm  
- full CLAMAV eval:check_clamav()  
- describe CLAMAV Clam AntiVirus detected a virus  
- score CLAMAV 10  
-----  
-''clamav.pm''  
- package !ClamAV;  
- use strict;  
- use Mail ::!SpamAssassin;  
- use Mail ::!SpamAssassin ::Plugin;  
- use File:: Scan::! ClamAV;  
- our @ISA = qw(Mail::!SpamAssassin::Plugin);  
+It requires  
+* [ ClamAV] installed so that scanning a mail with <tt>clamscan</tt> works  
+* the [File ::Scan ::ClamAV | http ://search.cpan.org/dist/ File- Scan- ClamAV/] [Perl] module  
  
- sub new {  
- my ($class , $mailsa) = @_;  
- $class = ref($class) || $class;  
- my $self = $class- >SUPER::new($mailsa);  
- bless ($self, $class);  
- $self- >register_eval_rule ("check_ clamav");  
- return $self;  
- }  
+To install , create the files in <tt >/etc/mail/spamassassin/</tt>. You can adjust the default score of 10 in <tt >clamav.cf</tt> if you like. Restart the <tt>spamd</tt> daemon if you're using that, and you should be all set.  
  
- sub check_ clamav {  
- my ($self, $permsgstatus, $fulltext) = @_;  
- my $clamav = new File ::Scan::!ClamAV(port => 3310);  
- my ($code, $virus) = $clamav- >streamscan(${$fulltext});  
- my $isspam = ;  
- my $header = "";  
- if(!$code) {  
- my $errstr = $ clamav->errstr();  
- Mail ::!SpamAssassin::Plugin::dbg ("ClamAV: Error scanning: $errstr" );  
- $header = "Error ($errstr)";  
- } elsif($code eq 'OK') {  
- Mail::!SpamAssassin::Plugin::dbg("ClamAV: No virus detected");  
- $header = "No";  
- } elsif($code eq 'FOUND') {  
- Mail::!SpamAssassin::Plugin::dbg("ClamAV: Detected virus: $virus");  
- $header = "Yes ($virus)";  
- $isspam = 1;  
- } else {  
- Mail ::!SpamAssassin::Plugin::dbg("ClamAV: Error, unknown return code: $code");  
- $header = "Error (Unknown return code from ClamAV: $code)";  
- }  
- $permsgstatus- >{main}->{conf}->{headers_spam}->{"Virus"} = $header;  
- $permsgstatus->{main}->{conf}->{headers_ham}->{"Virus"} = $header ;  
- return $isspam ;  
- }  
- 1 ;  
-----  
+<tt> clamav.cf</tt> ::  
+ <verbatim >  
+ loadplugin ClamAV clamav.pm  
+ full CLAMAV eval :check_clamav ()  
+ describe CLAMAV Clam AntiVirus detected a virus  
+ score CLAMAV 10  
+ </verbatim>  
+  
+<tt>clamav.pm</tt> ::  
+ <verbatim >  
+ package ClamAV ;  
+ use strict ;  
+ use warnings
  
-__How To Use It__  
+ use Mail::SpamAssassin;  
+ use Mail::SpamAssassin::Plugin;  
+ use File::Scan::ClamAV;  
  
-First of all, you need to install [ClamAV] and ensure that scanning a mail with '''clamscan''' works.  
+ our @ISA = qw(Mail::SpamAssassin::Plugin);  
  
-Second , you need to install the [File ::Scan::ClamAV|http://search.cpan.org/~cfaber/File-Scan -ClamAV/lib/File/Scan/ClamAV.pm] perl module.  
+ sub new {  
+ my ( $class , $mailsa ) = @_;  
+ my $self = $class->SUPER ::new( $mailsa );  
+ bless( $self, $class );  
+ $self ->register_eval_rule( "check_clamav" );  
+ return $self;  
+ }  
  
-Finally , save the two files above into the /etc/mail/spamassassin/ directory. You can adjust the default score of 10 in '''clamav.cf''' if you like. Restart the spamd daemon if you're using that, and you should be all set.  
+ sub _set_header {  
+ my ( $msgstatus , $header ) = @_;  
+ $msgstatus->{ main }->{ conf }->{ $_ }->{ "Virus" } = $header  
+ for qw( headers_spam headers_ham );  
+ }  
  
-If you 'd like to sort virus emails to a separate folder , create a rule looking for the "X-Spam-Virus : Yes" header.  
+ sub check_clamav {  
+ my ( $self, $permsgstatus, $fulltext ) = @_;  
+ my $clamav = File::Scan::ClamAV->new( port => 3310 );  
+ my ( $code, $virus ) = $clamav->streamscan( ${ $fulltext } );  
+ if ( !$code ) {  
+ my $errstr = $clamav->errstr();  
+ Mail::SpamAssassin::Plugin::dbg( "ClamAV: Error scanning: $errstr" );  
+ _set_header( $permsgstatus, "Error ($errstr)" );  
+ }  
+ elsif ( $code eq 'OK' ) {  
+ Mail::SpamAssassin::Plugin::dbg( "ClamAV: No virus detected" );  
+ _set_header( $permsgstatus , "No" );  
+ }  
+ elsif ( $code eq 'FOUND' ) {  
+ Mail ::SpamAssassin::Plugin::dbg( "ClamAV: Detected virus: $virus" );  
+ _set_header( $permsgstatus, " Yes ($virus) " );  
+ return 1;  
+ }  
+ else {  
+ Mail::SpamAssassin::Plugin::dbg( "ClamAV: Error, unknown return code: $code" );  
+ _set_ header( $permsgstatus, "Error (Unknown return code from ClamAV: $code)" );  
+ }  
+ return;  
+ }  
+ 1;  
+ </verbatim>