email parsing->mysql:: Can someone explain me this perl script?

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;
}
}
 
T

Tad McClellan

For this purpose I got this script (called amavistat), however
I need that someone ^^^^^^^
^^^^^^^
# Veghead 2001
# changes 18.08.03 - Marcus Schopen <[email protected]>


Ask Veghead or Marcus, it is their (amateurish looking) program.

If they won't help, then you will need to learn some Perl
before you will be able to modify the Perl program.


What part of the program you posted are you having trouble figuring out?

If you tell us where you are stuck, we can probably help unstick you.

If you don't understand any of the parts, then go off and learn
Perl until you do, then come back here with any remaining questions.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top