On Saturday 09 March 2002 09:39 pm, Rob McMillin wrote:
> Kerry Nice wrote:
> >#this one will only work for me, but if it there, it
> >is 100% GUARANTEED to be spam
> >#not sure how to make a general case for this
> >header KERRYSUBJECT Subject =~ /kerry_nice/
> >describe KERRYSUBJECT Personalized subject for
> >Kerry based on email address
> >score KERRYSUBJECT 4.00
> Could be done some other way (allowing expressions?).
OK, I've tried it in a way that will allow for expressions (at least what I
understood you meant by "expressions"). I've hacked things up so that this
rule works:
# Don't want to trip rule if whole email adress is in subject
header USER_NAME Subject =~ /\b${user_name}(?:[^@]|$)/i
describe USER_NAME User name found in subject
"$user_name" is a variable global to PerMsgStatus.pm, and can be evaluated in
regexps. I've tested and found that, if "$user_name" is changed *after*
"eval $evalstr" is run for "sub _xyz_tests", the test will use the new value
of "$user_name", so it should work for checking multiple messages with spamd,
though I haven't checked a spamd setup. I have no idea what this does to
runtimes though, as I haven't benchmarked it, and don't know much about Perl
internals.
Test regexps can also use the variables "full_name", "first_name", and
"last_name".
I also changed the get() method of PerMsgStatus so that it will now do the
right thing for "From:name", like it currently does for "From:addr".
--
Visit http://dmoz.org, the world's | Give a man a match, and he'll be warm
largest human edited web directory. | for a minute, but set him on fire, and
| he'll be warm for the rest of his life.
[EMAIL PROTECTED] ICQ: 132152059 |
Index: lib/Mail/SpamAssassin/PerMsgStatus.pm
===================================================================
RCS file: /cvsroot/spamassassin/spamassassin/lib/Mail/SpamAssassin/PerMsgStatus.pm,v
retrieving revision 1.82
diff -u -3 -p -r1.82 PerMsgStatus.pm
--- lib/Mail/SpamAssassin/PerMsgStatus.pm 7 Mar 2002 10:51:22 -0000 1.82
+++ lib/Mail/SpamAssassin/PerMsgStatus.pm 10 Mar 2002 07:20:34 -0000
@@ -38,7 +38,7 @@ use Mail::SpamAssassin::EvalTests;
use Mail::SpamAssassin::AutoWhitelist;
use vars qw{
- @ISA $base64alphabet
+ @ISA $base64alphabet $user_name $first_name $last_name $full_name
};
@ISA = qw();
@@ -72,6 +72,18 @@ sub check {
my ($self) = @_;
local ($_);
+ my $address = $self->get("To:addr");
+ my $name = $self->get("To:name");
+
+ $full_name = $name;
+
+ $address =~ /^(.+)\@/;
+ $user_name = quotemeta($1 || "NO_USERNAME_FOUND");
+
+ $name =~ /^(\S+)?.*(\S+)?$/;
+ $first_name = quotemeta($1 || "NO_FIRST_NAME_FOUND");
+ $last_name = quotemeta($2 || "NO_LAST_NAME_FOUND");
+
# in order of slowness; fastest first, slowest last.
# we do ALL the tests, even if a spam triggers lots of them early on.
# this lets us see ludicrously spammish mails (score: 40) etc., which
@@ -748,6 +765,9 @@ sub get {
my $getaddr = 0;
if ($hdrname =~ s/:addr$//) { $getaddr = 1; }
+ my $getname = 0;
+ if ($hdrname =~ s/:name$//) { $getname = 1; }
+
my @hdrs = $self->{msg}->get_header ($hdrname);
if ($#hdrs >= 0) {
$_ = join ("\n", @hdrs);
@@ -774,6 +794,11 @@ sub get {
chomp; s/\r?\n//gs;
s/^.*?<(.+)>\s*$/$1/g # Foo Blah <jm@foo>
or s/^(.+)\s\(.*?\)\s*$/$1/g; # jm@foo (Foo Blah)
+
+ } elsif ($getname) {
+ chomp; s/\r?\n//gs;
+ s/^[\'\"]*(.*?)[\'\"]*\s*<.+>\s*$/$1/g # Foo Blah <jm@foo>
+ or s/^.+\s\((.*?)\)\s*$/$1/g; # jm@foo (Foo Blah)
} else {
$_ = $self->mime_decode_header ($_);