Automating SpamCop

I am not sure how effective SpamCop is. Once upon a time I regularly reported spam to the service. In return, I was occasionally rewarded with administrators saying thanks and putting an end to the source of at least some of the spam.

Spam is no longer the problem it once was. Filters have become better. Multi-layer approaches trap most of the spam. My company in-boxes remain relatively free of junk mail.
This weekend we saw a spike in the amount of spam getting through to the spam mailboxes. Normally I delete mail that reaches these mailboxes. It is rare for valuable e-mail to be misclassified and for that I am grateful. I appreciate the efforts the community has gone to. SpamAssassin and greylisting in particular stand out as worthwhile spam filtering options.
This weekend saw tens of spam e-mails coming in short bursts and I wanted to at least inform someone. With this in mind, I wrote two scripts.
The first script sends e-mails currently selected in Mail.app to SpamCop:
#!/usr/bin/perl
use WWW::Mechanize;
my $applescript =<<END;
set raw to {}
tell application "Mail"
set msgs to selection
if length of msgs is not 0 then
--display dialog "Report selected message(s) to Spamcop?"
--if the button returned of the result is "OK" then
repeat with msg in msgs
set messageSource to source of msg
set raw to raw & messageSource
set background color of msg to gray
end repeat
--end if
end if
end tell
raw
END
my $output = &osascript($applescript);
my @output = split(/, Return-Path/gsm,$output);
my @raw;
foreach my $output (@output) {
$output = 'Return-Path'.$output if ($output =~ /^: /);
$output = substr($output,0,49999); # spamcop constraint
push(@raw,$output);
}
my $spamcop_url = 'https://www.spamcop.net';
my $mech = WWW::Mechanize->new();
$mech->get( $spamcop_url );
$mech->submit_form(
form_number => 1,
fields => {
username => 'ENTER YOUR SPAMCOP USER NAME HERE',
password => 'ENTER YOUR SPAMCOP PASSWORD HERE',
}
);
foreach my $raw (@raw) {
$mech->get($spamcop_url);
$mech->submit_form(
form_name => 'submitspam',
fields => {
spam => $raw,
},
);
}
if (scalar(@raw) == 1) {
system("say 'Reported the spam email.'\n");
} else {
system("say 'Reported ".scalar(@raw)." spam emails.'\n");
}
sub osascript {
my ($script) = @_;
my @script = split(/\n/,$script);
my $script = ' -e \''.join('\' -e \'',@script).'\'';
my $command = 'osascript' . $script;
return `$command`;
}As you might expect, I call this first script using Power Manager as an external script event.

The second script walks the e-mails sent to SpamCop through the reporting process:
#!/usr/bin/perl
use WWW::Mechanize;
my $spamcop_url = 'https://www.spamcop.net';
my $mech = WWW::Mechanize->new();
$mech->get( $spamcop_url );
$mech->submit_form(
form_number => 1,
fields => {
username => 'ENTER YOUR SPAMCOP USER NAME HERE',
password => 'ENTER YOUR SPAMCOP PASSWORD HERE',
}
) ."\n";
my $stop = 0;
while(not $stop) {
$mech->follow_link( text => 'Report Now' ) ."\n";
my $form = $mech->form_name( 'sendreport' );
if ($form) {
print "Send Report form found: ".$mech->value('reports')."\n";
$mech->click_button( 'value' => 'Send Spam Report(s) Now' ) ."\n";
} else {
print "No report form button found.\n";
$stop = 1;
}
}There is no magic in these scripts. They use a combination of AppleScript and perl’s wonderful WWW::Mechanize module. Hopefully they will be of use to you.