pmail.pl
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!/usr/bin/perl
  2. #                                  
  3. # Prints mails to standard output  
  4. #                                  
  5. ####
  6. #### Standard inits and get options
  7. ####
  8. use DBI;
  9. use Getopt::Long;
  10. $VER="1.5";
  11. @fldnms= ("mail_from","mail_to","cc","date","time_zone","file","sbj","txt");
  12. $fields=8;
  13. @mail= (@from,@to,@cc,@date,@time_zone,@file,@sbj,@txt);
  14. $opt_user= $opt_password= "";
  15. $opt_socket= "/tmp/mysql.sock";
  16. $opt_port= 3306;
  17. $opt_db="mail";
  18. $opt_table="mails";
  19. $opt_help=$opt_count=0;
  20. GetOptions("help","count","port=i","db=s","table=s","host=s","password=s",
  21.    "user=s","socket=s") || usage();
  22. if ($opt_host eq '')
  23. {
  24.   $opt_host = "localhost";
  25. }
  26. if ($opt_help || !$ARGV[0])
  27. {
  28.   usage();
  29. }
  30. ####
  31. #### Connect and parsing the query to MySQL
  32. ####
  33. $dbh= DBI->connect("DBI:mysql:$opt_db:$opt_host:port=$opt_port:mysql_socket=$opt_mysql_socket", $opt_user,$opt_password, { PrintError => 0})
  34. || die $DBI::errstr;
  35. if ($opt_count)
  36. {
  37.   count_mails();
  38. }
  39. $fields=0;
  40. $query = "select ";
  41. foreach $val (@fldnms)
  42. {
  43.   if (!$fields)
  44.   {
  45.     $query.= "$val";
  46.   }
  47.   else
  48.   {
  49.     $query.= ",$val";
  50.   }
  51.   $fields++;
  52. }
  53. $query.= " from $opt_table where $ARGV[0] order by date desc";
  54. ####
  55. #### Send query and save result
  56. ####
  57. $sth= $dbh->prepare($query);
  58. if (!$sth->execute)
  59. {
  60.   print "$DBI::errstrn";
  61.   $sth->finish;
  62.   die;
  63. }
  64. for ($i=0; ($row= $sth->fetchrow_arrayref); $i++)
  65. {
  66.   for ($j=0; $j < $fields; $j++)
  67.   {
  68.     $mail[$j][$i]= $row->[$j];
  69.   }
  70. }
  71. ####
  72. #### Print to stderr
  73. ####
  74. for ($i=0; $mail[0][$i]; $i++)
  75. {
  76.   print "#" x 33;
  77.   print " " . ($i+1) . ". Mail ";
  78.   print "#" x 33;
  79.   print "nFrom: $mail[0][$i]n";
  80.   print "To: $mail[1][$i]n";
  81.   print "Cc: $mail[2][$i]n";
  82.   print "Date: $mail[3][$i]n";
  83.   print "Timezone: $mail[4][$i]n";
  84.   print "File: $mail[5][$i]n";
  85.   print "Subject: $mail[6][$i]n";
  86.   print "Message:n$mail[7][$i]n";
  87. }
  88. print "#" x 20;
  89. print " Summary: ";
  90. if ($i == 1) 
  91. {
  92.   print "$i Mail ";
  93.   print "matches the query ";
  94. }
  95. else
  96. {
  97.   print "$i Mails ";
  98.   print "match the query ";
  99. }
  100. print "#" x 20;
  101. print "n";
  102. ####
  103. #### Count mails that matches the query, but don't show them
  104. ####
  105. sub count_mails
  106. {
  107.   $sth= $dbh->prepare("select count(*) from $opt_table where $ARGV[0]");
  108.   if (!$sth->execute)
  109.   {
  110.     print "$DBI::errstrn";
  111.     $sth->finish;
  112.     die;
  113.   }
  114.   while (($row= $sth->fetchrow_arrayref))
  115.   {
  116.     $mail_count= $row->[0];
  117.   }
  118.   if ($mail_count == 1)
  119.   {  
  120.     print "$mail_count Mail matches the query.n";
  121.   }
  122.   else
  123.   {
  124.     print "$mail_count Mails match the query.n";
  125.   }
  126.   exit;
  127. }
  128. ####
  129. #### Usage
  130. ####
  131. sub usage
  132. {
  133.   print <<EOF;
  134.   pmail version $VER by Jani Tolonen
  135.   Usage: pmail [options] "SQL where clause"
  136.   Options:
  137.   --help      show this help
  138.   --count     Shows how many mails matches the query, but not the mails.
  139.   --db=       database to use (Default: $opt_db)
  140.   --table=    table to use    (Default: $opt_table)
  141.   --host=     Hostname which to connect (Default: $opt_host)
  142.   --socket=   Unix socket to be used for connection (Default: $opt_socket)
  143.   --password= Password to use for mysql
  144.   --user=     User to be used for mysql connection, if not current user
  145.   --port=     mysql port to be used (Default: $opt_port)
  146.   "SQL where clause" is the end of the select clause,
  147.   where the condition is expressed. The result will
  148.   be the mail(s) that matches the condition and
  149.   will be displayed with the fields:
  150.   - From
  151.   - To
  152.   - Cc
  153.   - Date
  154.   - Timezone
  155.   - File (Where from the current mail was loaded into the database)
  156.   - Subject
  157.   - Message text
  158.   The field names that can be used in the where clause are:
  159.     Field      Type 
  160.   - mail_from  varchar(120)
  161.   - date       datetime
  162.   - sbj        varchar(200)
  163.   - txt        mediumtext
  164.   - cc         text
  165.   - mail_to    text
  166.   - time_zone  varchar(6)
  167.   - reply      varchar(120)
  168.   - file       varchar(32)
  169.   - hash       int(11)
  170.   An example of the pmail:
  171.   pmail "txt like '%libmysql.dll%' and sbj like '%delphi%'"
  172.   NOTE: the txt field is NOT case sensitive!
  173. EOF
  174.   exit(0);
  175. }