#!/usr/bin/perl =head1 NAME badsubject - Block messages based upon their subjects. =head1 DESCRIPTION This plugin will reject messages based upon a blacklist located in the file /etc/qpsmtpd/badsubject. =cut =head1 LICENSE Submitted to the public domain. =cut =head1 AUTHOR Steve Kemp http://www.steve.org.uk/Software/qpsmtpd/ =cut use strict; use warnings; use Qpsmtpd::Constants; =begin doc The handler which is called when the message is received. =end doc =cut sub hook_data_post { my ( $self, $transaction ) = @_; # # Get the subject of the messages. # my $subject = $transaction->header->get("Subject") || undef; # # No subject? Ignore. # return DECLINED unless ( defined($subject) && length($subject) ); # # strip the trailing newline. # $subject =~ s/[\r\n]//g; # # Load the patterns # my @patterns = $self->qp->config("badsubject") or return (DECLINED); # # For each pattern see if we get a match. # foreach my $pattern (@patterns) { # # skip empty patterns, or those starting with '#'. # next if ( ( !length($pattern) ) || ( $pattern =~ /^([ \t]+)$/ ) || ( $pattern =~ /^#/ ) ); # # If matched reject.. # if ( $subject =~ /\Q$pattern\E/i ) { $self->log( LOGWARN, "badsubject:$subject subject-match:$pattern" ); return ( DENY, "badsubject: $subject" ); } } # # No match: Log the subject in case it is clearly bogus and should # be dropped # $self->log( LOGWARN, "Subject: $subject" ); return (DECLINED); }