#!/usr/bin/perl use strict; my @files = @ARGV; my @raw_header_pat = ( 'To:<>', "To:\n", "From:\n", "Subject:\n", 'From:<>', '!!!', ); my @raw_body_pat = ( '!!!', 'FREE', 'OFFER', 'OPPORTUNITY', '', 'ORDER TODAY', 'ORDER NOW', '"REMOVE"', '"remove"', 'To be removed', 'to be removed', 'XXX', 'HOT', 'Section 301', 'section 301', 'SECTION 301', 'MLM', 'work from home', 'Dear Friend', 'FINANCIAL', 'WEALTHY', ); my @header_pat = map {quotemeta $_} @raw_header_pat; my @body_pat = map {quotemeta $_} @raw_body_pat; foreach my $file (@files) { #print "Starting file $file\n"; open (MAIL, $file) || die $!; my $header= 1; my $spam = 0; my $line; LOOP: while (defined ($line = ) ) { #print $line; chomp $line; $line =~s/^\s*//; $line =~s/\s*$//; #if ($line =~ /^\s*$/ ) { if ($header && ($line eq '') ) { $header = 0; next LOOP; } if ($header) { if ( &scan_line($line, \@header_pat) ) { $spam = 1; last LOOP; } } else { if ( &scan_line($line, \@body_pat) ) { $spam = 1; last LOOP; } } } if ($spam) { print "YES\n"; } else { print "NO\n"; } close MAIL; } sub scan_line { my ($line, $pats) = @_; foreach my $pat (@$pats) { if ($line =~ /$pat/) { #print "matched $pat\n$line\n"; return 1; } } return 1 if ($line =~/[a-zA-Z]+\s*_____/); return 0; }