A
albatroz
I am a perl noob that can learn if you give me a hand.
I currently need a script to read emails using email piping,
extract some information and put it inside a MySQL database.
The reason? Make some statistics of my email server antivirus.
The sample body of my emails is as follows:
-----------------> Source of Sample email source <---------
From: "MailScanner" <[email protected]>
To: (e-mail address removed)
Subject: Advertencia: Virus detectado en e-mail
Message-Id: <[email protected]>
Date: Sun, 29 Aug 2004 17:33:08 -0500
Body:
Se han encontrado virus en el siguiente e-mail:
Sender: (e-mail address removed)
IP Address: 200.106.12.141.22214
Recipient: (e-mail address removed)
Subject: RETURNED MAIL: SEE TRANSCRIPT FOR DETAILS
MessageID: 1C1YEL-0002Zn-VA
Informe: message.zip contains Worm.Mydoom.M
-----------------> Source of Sample email source <---------
For this purpose I got this script (called amavistat), however
I need that someone tells me what modifications should I do to
to make it work in my case, here I am attaching the source of
the script
#!/usr/bin/perl
# Veghead 2001
# Fixed stupid '=' vs 'eq' bug - Veghead 2003-08-14
#
# changes 18.08.03 - Marcus Schopen <[email protected]>
use DBD::mysql;
$server='localhost';
$dbname='amavistat';
$table='virus';
$username='xxx';
$password='xxx';
$state="inheader";
$dbh=DBI->connect("DBI:mysql:$dbname:$server",$username,$password) or
die("Can't connect to MySQL");
$state="inheader";
while(<>) {
chomp;
if ($state eq "inheader") {
if (length($_)<2) {$state="inbody";}
elsif ($_=~/^Subject: VIRUS FROM <(.*)> \((.*)\)/) {
$virusfrom=$1;
$viruses=$2;
$viruswarn++;
}
} elsif ($state="inbody") {
if ($_=~/^-> <([^\@]+\@[^\@]+)>/) {
$virusto=$1;
if ($viruswarn) {do_something();}
}
}
}
sub do_something {
foreach $vname ($viruses) {
print "From: $virusfrom\nTo: $virusto\nVirus: $vname\n\n";
$sth = $dbh->prepare("insert into $table values
(0,now(),'$virusfrom','$virusto',
'$vname')");
$sth->execute;
$sth->finish;
}
}
I currently need a script to read emails using email piping,
extract some information and put it inside a MySQL database.
The reason? Make some statistics of my email server antivirus.
The sample body of my emails is as follows:
-----------------> Source of Sample email source <---------
From: "MailScanner" <[email protected]>
To: (e-mail address removed)
Subject: Advertencia: Virus detectado en e-mail
Message-Id: <[email protected]>
Date: Sun, 29 Aug 2004 17:33:08 -0500
Body:
Se han encontrado virus en el siguiente e-mail:
Sender: (e-mail address removed)
IP Address: 200.106.12.141.22214
Recipient: (e-mail address removed)
Subject: RETURNED MAIL: SEE TRANSCRIPT FOR DETAILS
MessageID: 1C1YEL-0002Zn-VA
Informe: message.zip contains Worm.Mydoom.M
-----------------> Source of Sample email source <---------
For this purpose I got this script (called amavistat), however
I need that someone tells me what modifications should I do to
to make it work in my case, here I am attaching the source of
the script
#!/usr/bin/perl
# Veghead 2001
# Fixed stupid '=' vs 'eq' bug - Veghead 2003-08-14
#
# changes 18.08.03 - Marcus Schopen <[email protected]>
use DBD::mysql;
$server='localhost';
$dbname='amavistat';
$table='virus';
$username='xxx';
$password='xxx';
$state="inheader";
$dbh=DBI->connect("DBI:mysql:$dbname:$server",$username,$password) or
die("Can't connect to MySQL");
$state="inheader";
while(<>) {
chomp;
if ($state eq "inheader") {
if (length($_)<2) {$state="inbody";}
elsif ($_=~/^Subject: VIRUS FROM <(.*)> \((.*)\)/) {
$virusfrom=$1;
$viruses=$2;
$viruswarn++;
}
} elsif ($state="inbody") {
if ($_=~/^-> <([^\@]+\@[^\@]+)>/) {
$virusto=$1;
if ($viruswarn) {do_something();}
}
}
}
sub do_something {
foreach $vname ($viruses) {
print "From: $virusfrom\nTo: $virusto\nVirus: $vname\n\n";
$sth = $dbh->prepare("insert into $table values
(0,now(),'$virusfrom','$virusto',
'$vname')");
$sth->execute;
$sth->finish;
}
}