summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'z-distfiles/scripts-gw/spamcop')
-rwxr-xr-xz-distfiles/scripts-gw/spamcop179
1 files changed, 179 insertions, 0 deletions
diff --git a/z-distfiles/scripts-gw/spamcop b/z-distfiles/scripts-gw/spamcop
new file mode 100755
index 0000000..28a1e60
--- /dev/null
+++ b/z-distfiles/scripts-gw/spamcop
@@ -0,0 +1,179 @@
+#!/usr/bin/perl -w
+
+use HTML::Form;
+use LWP;
+use HTTP::Cookies;
+
+sub get_all_links( $ );
+sub get_login_cookie( $$$$ );
+sub report_all_spam( $$ );
+
+if ($ARGV[0] eq "--help" ) {
+ print 'usage: spamcop {EMAIL-FOLDER}'."\n";
+ print 'usage: spamcop /home/heinz/mail/Inbox/.SpamCop'."\n";
+ exit;
+}
+
+# Configuration settings
+
+my $spam_cop_user = 'gunnarwrobel@yahoo.de';
+my $spam_cop_pass = 'k8FHdADl';
+
+# Main routine
+my $folder = $ARGV[0]; # the folder with spam cop answers
+
+my $ua = LWP::UserAgent->new();
+$ua->cookie_jar(HTTP::Cookies->new(file => "$ENV{HOME}/.cookies.txt"));
+
+
+my @link_batch = get_all_links( $folder );
+
+if (scalar( @link_batch ) > 0)
+{
+
+ get_login_cookie( $ua,
+ $link_batch[0],
+ $spam_cop_user,
+ $spam_cop_pass
+ );
+
+ report_all_spam( $ua,
+ \@link_batch
+ );
+}
+else
+{
+ die "Unable to extract any links from folder $folder!";
+}
+
+## Function get_all_links
+##
+## Retrieves all the SpamCop report links from the
+## mails in one folder
+##
+## Parameters:
+##
+## folder: the path to the folder to check for links
+
+sub get_all_links ( $ )
+{
+ my $folder = shift;
+
+ opendir (DIR, $folder . "/cur");
+ my @files = grep { $_ ne '.' and $_ ne '..'} readdir( DIR );
+
+ my @links = ();
+ my $link;
+
+ if (scalar @files > 0)
+ {
+ foreach my $file (@files)
+ {
+ open(FILE, $folder . "/cur/" . $file);
+ while (<FILE>)
+ {
+ if (($link) = ($_ =~ /(.*www.spamcop.net.sc.id=.*)/))
+ {
+ push @links, {'LINK' => $link, 'FILE' => $folder . "/cur/" . $file};
+ }
+ }
+ close(FILE);
+ }
+ }
+
+ return @links;
+}
+
+## Function get_login_cookie
+##
+## Logs the user into spamcop
+## and returns the session cookie
+##
+## Parameters:
+##
+## ua: LWP user agent
+## link: one of the extracted report links
+## user: SpamCop user
+## pass: SpamCop password
+
+sub get_login_cookie ( $$$$ )
+{
+
+ my $ua = shift;
+ my $link = shift;
+ my $user = shift;
+ my $pass = shift;
+
+ my $form = $ua->get($link->{'LINK'})
+ or
+ die "Couldn't fetch $link";
+
+ if ( $form->is_error() )
+ {
+ die $form->message();
+ }
+
+ my $formurl = "http://www.spamcop.net/mcgi";
+
+ my $resp = $ua->post
+ (
+ $formurl,
+ [
+ 'username' => $user,
+ 'password' => $pass,
+ 'duration' => '+12h',
+ 'action' => 'cookielogin',
+ 'returnurl' => '/mcgi?action=verifylogin',
+ 'submit' => 'Login'
+ ]
+ );
+
+ if ( $resp->is_error() )
+ {
+ die $resp->message();
+ }
+}
+
+## Function report_all_spam
+##
+## Reports every spam link
+##
+## Parameters:
+##
+## ua: LWP user agent
+## linklist: The list of report pages
+
+sub report_all_spam ( $$ )
+{
+ my $ua = shift;
+ my $link_list = shift;
+ my $form;
+ my @forms;
+ my $response;
+
+ foreach my $link (@{$link_list})
+ {
+ $form = $ua->get($link->{'LINK'})
+ or
+ die "Couldn't fetch $link";
+
+ @forms = HTML::Form->parse( $form );
+
+ foreach my $sendform (@forms)
+ {
+ if (defined $sendform->attr( 'name' )
+ and $sendform->attr( 'name' ) eq 'sendreport')
+ {
+ $response = $ua->request($sendform->click());
+ if ( $response->is_error() )
+ {
+ die "Failed to report spam:\n\n" . $response->message();
+ }
+ else
+ {
+ unlink $link->{'FILE'}
+ }
+ }
+ }
+ }
+}