diff options
Diffstat (limited to 'tests/pmail.pl')
-rwxr-xr-x | tests/pmail.pl | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/tests/pmail.pl b/tests/pmail.pl new file mode 100755 index 00000000000..4ca2033b4d1 --- /dev/null +++ b/tests/pmail.pl @@ -0,0 +1,195 @@ +#!/usr/bin/perl +# +# Prints mails to standard output +# +#### +#### Standard inits and get options +#### + +use DBI; +use Getopt::Long; + +$VER="1.4a"; + +@fldnms= ("mail_from","mail_to","cc","date","time_zone","file","sbj","txt"); +$fields=8; +@mail= (@from,@to,@cc,@date,@time_zone,@file,@sbj,@txt); + +$opt_user= $opt_password= ""; +$opt_socket= "/tmp/mysql.sock"; +$opt_port= 3306; +$opt_db="test"; +$opt_table="mails"; +$opt_help=$opt_count=0; + +GetOptions("help","count","port=i","db=s","table=s","host=s","password=s", + "user=s","socket=s") || usage(); + +if ($opt_host eq '') +{ + $opt_host = "localhost"; +} + +if ($opt_help || !$ARGV[0]) +{ + usage(); +} + +#### +#### Connect and parsing the query to MySQL +#### + +$dbh= DBI->connect("DBI:mysql:$opt_db:$opt_host:port=$opt_port:mysql_socket=$opt_mysql_socket", $opt_user,$opt_password, { PrintError => 0}) +|| die $DBI::errstr; + +if ($opt_count) +{ + count_mails(); +} + +$fields=0; +$query = "select "; +foreach $val (@fldnms) +{ + if (!$fields) + { + $query.= "$val"; + } + else + { + $query.= ",$val"; + } + $fields++; +} +$query.= " from $opt_table where $ARGV[0]"; + +#### +#### Send query and save result +#### + +$sth= $dbh->prepare($query); +if (!$sth->execute) +{ + print "$DBI::errstr\n"; + $sth->finish; + die; +} +for ($i=0; ($row= $sth->fetchrow_arrayref); $i++) +{ + for ($j=0; $j < $fields; $j++) + { + $mail[$j][$i]= $row->[$j]; + } +} + +#### +#### Print to stderr +#### + +for ($i=0; $mail[0][$i]; $i++) +{ + print "#" x 33; + print " " . ($i+1) . ". Mail "; + print "#" x 33; + print "\nFrom: $mail[0][$i]\n"; + print "To: $mail[1][$i]\n"; + print "Cc: $mail[2][$i]\n"; + print "Date: $mail[3][$i]\n"; + print "Timezone: $mail[4][$i]\n"; + print "File: $mail[5][$i]\n"; + print "Subject: $mail[6][$i]\n"; + print "Message:\n$mail[7][$i]\n"; +} +print "#" x 20; +print " Summary: "; +if ($i == 1) +{ + print "$i Mail "; + print "matches the query "; +} +else +{ + print "$i Mails "; + print "match the query "; +} +print "#" x 20; +print "\n"; + +#### +#### Count mails that matches the query, but don't show them +#### + +sub count_mails +{ + $sth= $dbh->prepare("select count(*) from $opt_table where $ARGV[0]"); + if (!$sth->execute) + { + print "$DBI::errstr\n"; + $sth->finish; + die; + } + while (($row= $sth->fetchrow_arrayref)) + { + $mail_count= $row->[0]; + } + if ($mail_count == 1) + { + print "$mail_count Mail matches the query.\n"; + } + else + { + print "$mail_count Mails match the query.\n"; + } + exit; +} + +#### +#### Usage +#### + +sub usage +{ + print <<EOF; + pmail version $VER by Jani Tolonen + + Usage: pmail [options] "SQL where clause" + Options: + --help show this help + --count Shows how many mails matches the query, but not the mails. + --db= database to use (Default: $opt_db) + --table= table to use (Default: $opt_table) + --host= Hostname which to connect (Default: $opt_host) + --socket= Unix socket to be used for connection (Default: $opt_socket) + --password= Password to use for mysql + --user= User to be used for mysql connection, if not current user + --port= mysql port to be used (Default: $opt_port) + "SQL where clause" is the end of the select clause, + where the condition is expressed. The result will + be the mail(s) that matches the condition and + will be displayed with the fields: + - From + - To + - Cc + - Date + - Timezone + - File (Where from the current mail was loaded into the database) + - Subject + - Message text + The field names that can be used in the where clause are: + Field Type + - mail_from varchar(120) + - date datetime + - sbj varchar(200) + - txt mediumtext + - cc text + - mail_to text + - time_zone varchar(6) + - reply varchar(120) + - file varchar(32) + - hash int(11) + An example of the pmail: + pmail "txt like '%libmysql.dll%' and sbj like '%delphi%'" + NOTE: the txt field is NOT case sensitive! +EOF + exit(0); +} |