Guest User

Untitled

a guest
Mar 13th, 2018
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.72 KB | None | 0 0
  1. #!/usr/bin/perl
  2. #===============================================================================
  3. #
  4. # FILE: controlmails.pl
  5. #
  6. # USAGE: ./controlmails.pl
  7. #
  8. # DESCRIPTION: control de mails AMES
  9. #
  10. # OPTIONS: ---
  11. # REQUIREMENTS: ---
  12. # BUGS: ---
  13. # NOTES: ---
  14. # AUTHOR: (Raimon Grau Cusco), <raimonster@gmail.com>
  15. # COMPANY:
  16. # VERSION: 1.0
  17. # CREATED: 02/25/08 04:33:33 CET
  18. # REVISION: ---
  19. #===============================================================================
  20.  
  21. use strict;
  22. use warnings;
  23. use Data::Dumper;
  24. use Storable;
  25. use Regexp::Common qw[Email::Address];
  26. use Email::Address;
  27. use Mail::Sender;
  28.  
  29.  
  30. #Codi main
  31. my @recvs;
  32. my @list;
  33. my $arxiu;
  34. my %log;
  35. #%log es un hash anidat:
  36. #log {user}
  37. # {sent} = num
  38. # {recv} = num
  39. # {att_env} = @nom_tam
  40. # {att_reb} = @nom_tam
  41. # {sendlist}= %
  42. # {user} = num
  43.  
  44. @list = glob("c.log");
  45. #@list = glob("/var/log/mail/reports/enero08/*");
  46.  
  47. foreach $arxiu (@list)
  48. {
  49. my $INFILE_file_name = $arxiu; # input file name
  50.  
  51. open my $INFILE, '<', $INFILE_file_name
  52. or die "$0 : failed to open input file '$INFILE_file_name' : $!\n";
  53.  
  54.  
  55. my $lastSender = "";
  56. my %currantes = %{retrieve("treballadors.txt")};
  57. my @addrs;
  58. while (<$INFILE>)
  59. {
  60. my $codi;
  61. my $nomSender;
  62. my $dominiSender;
  63. #Jan 6 01:10:18 [amavis] (32459-13) Checking: szAKM2RpNWqN <maviva@maviva.com> -> <ajm@ames.es>
  64. chomp;
  65. # if (/^.*\[amavis\] (\S+?) Checking: \S+ <(\w+?)@((ames\.es|alme\.ames\.es)|\w+?\.\w\w\w?)> -> <(\w+?)@((ames\.es|alme\.ames\.es)|\w+?\.\w\w\w?)>/)
  66. if (/^.*\[amavis\] (\S+?) Checking: \S+/)
  67. {
  68. my (@found) = /($RE{Email}{Address})/g;
  69. (@addrs) = map $_->address, Email::Address->parse("@found");
  70. # print "@addrs\n";
  71. my $sender = shift(@addrs);
  72. $lastSender=$sender;
  73. $sender =~ m/(.*)\@.*(ames\.es|alme\.ames\.es)/;
  74. if (defined $2) # Sender conegut
  75. {
  76. if (exists($currantes{$1}))
  77. {
  78. # print "Sender conegut $2\n";
  79. if (exists $log{$1}{"sent"})
  80. {
  81. $log{$1}{"sent"}++;
  82. }
  83. else
  84. {
  85. #Afegim el sender al hash de log
  86. $log{$1}{"sent"} = 1;
  87. $log{$1}{"recv"} = 0;
  88. $log{$1}{"att_env"} = [];
  89. $log{$1}{"att_reb"} = [];
  90.  
  91. }
  92. #Omplim la llista de mails enviats a qui
  93. foreach (@addrs) {
  94. $_=lc($_);
  95. if (exists $log{$1}{"sendlist"}{$_})
  96. {
  97. $log{$1}{"sendlist"}{$_}++;
  98. }
  99. else
  100. {
  101. $log{$1}{"sendlist"}{$_} = 1;
  102. }
  103. }
  104. }
  105. }
  106.  
  107. @recvs =[];
  108. # if (exists($currantes{$1}))
  109. {
  110. for (my $i=0; $i<$#addrs;$i++)
  111. {
  112. $_ = lc($addrs[$i]);
  113. if (m/(.*)@(ames\.es|alme\.ames\.es)/ ) # Recv conegut
  114. {
  115. if (exists($currantes{$1})) # print "Recv conegut $5\n";
  116. {
  117. push(@recvs, $_);
  118. if (exists $log{$1}{"sent"}) #si existeix l'usuari
  119. {
  120. $log{$1}{"recv"}++;
  121. }
  122. else
  123. {
  124. #Afegim el sender al hash de log
  125. $log{$1}{"sent"} = 0;
  126. $log{$1}{"recv"} = 1;
  127. $log{$1}{"att_env"} = [];
  128. $log{$1}{"att_reb"} = [];
  129. }
  130. }
  131. }
  132. }
  133. }
  134. }
  135.  
  136. # Jan 6 01:10:44 [amavis] (32532-10) p002 1/2 Content-Type: application/vnd.ms-excel, size: 1785 B, name: 80105-80105.XLS
  137. elsif (m/^.*\[amavis\] (\S+?) \S+ \S+ Content-Type: application\/\S+?, size: (\d+) B, name: (.*)$/)
  138. {
  139. my $tam = $2;
  140. my $nomAtt = $3;
  141. if ($lastSender =~ m/(.*)\@.*ames\.es/)
  142. {
  143. push @{ $log{$1}{"att_env"} }, "${nomAtt} \ttamany: ${tam}\n" ;
  144. }
  145. foreach (@recvs)
  146. {
  147. if (m/(.*)\@.*ames\.es/)
  148. {
  149. push @{ $log{$1}{"att_reb"} }, "${nomAtt} \ttamany: ${tam}\n" ;
  150. }
  151. }
  152. }
  153. }
  154.  
  155. # foreach my $key (keys %log)
  156. # {
  157. # print "$key\n";
  158. # print "\tenviats $log{$key}{'sent'}\n";
  159. # print "\trebuts $log{$key}{'recv'}\n";
  160. # foreach my $key2 (keys %{$log{$key}{'sendlist'}})
  161. # {
  162. # print "\ta $key2 =>$log{$key}{'sendlist'}{$key2}\n";
  163. # }
  164. # print "env: \t@{$log{$key}{'att_env'}}\n";
  165. # print "reb: \t@{$log{$key}{'att_reb'}}\n";
  166. # }
  167.  
  168.  
  169.  
  170.  
  171.  
  172. close $INFILE
  173. or warn "$0 : failed to close input file '$INFILE_file_name' : $!\n";
  174. }
  175. store(\%log, "log.log");
  176. my %hash2 = %{retrieve("log.log")};
  177. #print Dumper(\%hash2);
  178.  
  179.  
  180. #my $sender = new Mail::Sender
  181. #{smtp => 'correo.ames.es', from => 'holasoyrai@ytal.com'};
  182. #$sender->MailFile({to => 'helena.martinez@gmail.com, raimonster@gmail.com',
  183. # subject => 'PROVANDO MULTIPLES DESTINATARIOS',
  184. # msg => "ESTO ES LA POLLA");
  185.  
  186. my %depts = %{retrieve("depts.obj")};
  187.  
  188. for (keys %depts) #departament
  189. {
  190. my @mailBody;
  191. # push @mailBody , "$_ :\n";
  192. for my $treb (@{$depts{$_}{'treb'}}) #@rray de treballadors del departament
  193. {
  194. next if (!exists($log{$treb}));
  195. push @mailBody, "$treb:\n" ;
  196. push @mailBody , "\tMails rebuts $log{$treb}{'recv'}\n";
  197. push @mailBody , "\tMails enviats $log{$treb}{'sent'}\n\n";
  198. for my $key2 (keys %{$log{$treb}{'sendlist'}})
  199. {
  200. push @mailBody, "\ta $key2 =>$log{$treb}{'sendlist'}{$key2}\n";
  201. }
  202. push @mailBody , "adjunts enviats: \t@{$log{$treb}{'att_env'}}\n";
  203. push @mailBody , "adjunts rebuts: \t@{$log{$treb}{'att_reb'}}\n";
  204. }
  205.  
  206. unshift @mailBody, "enviar a $depts{$_}{'jefe'}\n" if (scalar @mailBody >1);
  207. unshift @mailBody, "$_\n" if (scalar @mailBody >2);
  208.  
  209. # my $sender = new Mail::Sender
  210. # {smtp => 'correo.ames.es', from => 'adpersonal@ames.es'};
  211. # $sender->MailFile({to =>"$depts{$_}{'jefe'}",
  212. # subject => "Informe de control de mails del departament $_",
  213. # msg => "ESTO ES LA REPERA")};
  214.  
  215. if (scalar @mailBody > 3)
  216. {
  217. # print "El tamany es ", scalar @mailBody , "\n";
  218. for (@mailBody)
  219. {
  220. print "$_";
  221. }
  222. }
  223. print "---------------------%<--------------------\n";
  224. }
Add Comment
Please, Sign In to add comment