package GeoIP;
use strict;
use warnings;
use Mail::SpamAssassin::Plugin;
use Geo::IP;
our @ISA = qw(Mail::SpamAssassin::Plugin);
sub new {
my ($class, $mailsa) = @_;
$class = ref($class) || $class;
my $self = $class->SUPER::new($mailsa);
bless($self, $class);
$self->register_eval_rule("check_geoip_country");
return $self;
}
sub check_geoip_country {
my ( $self, $pms ) = @_;
$pms->{lasthop} = $pms->{relays_untrusted}->[0];
if (defined($pms->{lasthop}) && defined($pms->{lasthop}->{ip}))
{
$pms->set_tag('COUNTRY_IP', $pms->{lasthop}->{ip});
my $geo = Geo::IP->new(GEOIP_MEMORY_CACHE);
my $country = $geo->country_code_by_addr($pms->{lasthop}->{ip});
if (defined($country))
{
$pms->{msg}->put_metadata('X-Spam-Country', $country);
$pms->set_tag('COUNTRY', $country);
}
else
{
$pms->{msg}->put_metadata('X-Spam-Country', 'Unknown');
$pms->set_tag('COUNTRY', 'Unknown');
}
}
return 0;
}
1;