source: extensions/Mail_supervisor/main.inc.php @ 4021

Last change on this file since 4021 was 4021, checked in by cljosse, 11 years ago

[mail_supervisor] include numbers of destinataires in the number of mail

File size: 7.7 KB
Line 
1<?php
2/*
3Plugin Name: Mail supervisor
4Version: 1.0.1
5Description:  Mail supervisor surveille l'envoie des mails.
6Plugin URI: http://piwigo.org/ext
7Author: cljosse
8Author URI:http://cljosse.e3b.org
9*/
10// http://piwigo.org/ext/extension_view.php?eid=309
11// 4019
12
13if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
14define('mail_superv_DIR' , basename(dirname(__FILE__)));
15define('MAIL_SUPERV_PATH' , PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/');
16include_once (MAIL_SUPERV_PATH.'include/constants.php'); 
17include_once (MAIL_SUPERV_PATH.'include/fonctions.php'); 
18
19/*
20EVENT_HANDLER_PRIORITY_NEUTRAL  */
21
22add_event_handler('send_mail', 'clj_mail',EVENT_HANDLER_PRIORITY_NEUTRAL - 1 , 6);
23
24function clj_mail($result, $mailto, $subject, $content, $headers, $args)
25{
26    global $conf, $user, $lang_info,  $conf_mail,$mails_options,$mails_données , $template,$page ,$erreur_message; 
27        // lecture config table -------------
28
29
30        $mails_options = explode("," , $conf['mail_superv']);
31       
32        // lecture données       -------------
33    $mails_données = Get_Datas();
34       
35        $nb_mails         =     $mails_données['nb_mails'] ;
36        $next_day  =  $mails_données['date_mail'] ;
37       
38        $reste =    $mails_données['reste'] ;
39        $reste_mail =    $mails_données['reste_mail'] ;
40        $reste_spam =    $mails_données['reste_spam'] ;
41       
42 $mails_données['quarantaine'] =    ( $mails_données['reste'] >0 ) ? "true" : "false" ;
43 
44
45    $match=array("<",">");
46    $string=array("&lt;","&gt;") ;
47        $search=array("D","H","M","S","W");
48        $replace=array(" day"," Hour"," minute"," second"," week");
49       
50$header_message='<pre>
51Destinataire :'.$mailto.'
52Headers      :
53'.str_replace( $match,$string, $headers).'
54Sujet        :'.$subject.'
55</pre>'; 
56
57  $nb_destinataires=0;
58 if (mailto<>"" )  $nb_destinataires +=1; 
59   //================= réécriture de l'entête ===============================
60
61if ($mails_options[0] == 'on') {
62        if ($mailto=="")        $mailto=$conf_mail['email_webmaster'];
63}
64if ($mails_options[1] == 'on') { 
65                if (!empty($args['Cc']))
66                {
67                  $nb_destinataires += count($args['Cc']);
68                  $headers= corrige_header('Cc:',$headers);
69                }
70                if (!empty($args['Bcc']))
71                {
72                  $nb_destinataires += count($args['Bcc']);
73                  $headers      = corrige_header('Bcc',$headers);
74                }
75
76  }
77
78if ($mails_options[2]=='on')   {
79
80        $texte = "This is a multi-part message in MIME format.\n"; 
81       
82        $texte .= "-----=".$conf_mail['boundary_key']."\n"; 
83        $texte .= "Ceci est un message est au format MIME.\n"; 
84        $texte .= 'Content-Type: text/plain; charset="UTF-8"'."\n"; 
85        $texte .= 'Content-Transfer-Encoding: 8bit'."\n\n"; 
86        $texte .= $mails_données['header_text']; // A voir texte brut...
87           
88                $texte .= "\n\n"; 
89       
90                $content =$texte .$content ;
91}
92
93       
94$ret=false;
95 if (    ($mails_données['quarantaine']=="false") ) 
96  {
97        //======== Non mise en quarantaine =============
98
99                ob_start();
100                        $ret = mail($mailto, 'Plugin'.$subject, $content, $headers);
101                        $message = ob_get_contents();
102        ob_end_clean();
103               
104                        $mails_données['message']=$message;     
105                        $est_un_spam =!(strpos(strtolower($message), 'spam') === false);
106                if ($est_un_spam == false) {
107                   //--- Non détection de spam ------------------
108                         if ($mails_données['nb_mails']==0) {
109                                $date_mail=time();
110                                       
111                                        $mails_periode="+".str_replace( $search, $replace, $mails_données['nb_mails_periode']);
112                                        $next_day =  strtotime($mails_periode,time());
113                                $mails_données['date_mail'] =  $next_day;
114                                }       
115                                $next_day = time() + (0); 
116                                $mails_données['date_quarantaine'] = $next_day ;
117                        $mails_données['nb_mails'] += 1;
118          // teste limite atteinte :
119       
120          if (($mails_données['nb_mails'] >= $mails_données['nb_mails_maxi'])) 
121                        {
122                        $erreur_message .= "ALERTE !!! DANGER DE MISE EN QUARANTAINE PAR VOTRE FAI <br />" ;
123                        $erreur_message .=  "Vous avez d&eacute;pass&eacute; le nombre de mails admissibles par semaine. <br /> <br />";
124                        $erreur_message .='Date du premier mail: ' . date('d-M-Y H:m:s',$mails_données['date_mail']);
125                        $rest_mail=  $mails_données['date_mail']-time() ; 
126                        $erreur_message .= '<br />Encore : '. int_to_heure($rest_mail) ;
127                       
128                                if ( (float) $rest_mail <= 0)
129                                        {
130                                        $mails_periode="+".str_replace( $search, $replace, $mails_données['nb_mails_periode']);
131                                        $next_day =  strtotime($mails_periode,time());
132                                $mails_données['date_mail'] =  $next_day;
133                               
134                                        }
135                       
136                       
137                        }
138                        if ($ret==false) {     
139                        //=============== La fonction mail à retournée false=========================           
140                                $erreur_message .= '<br />---- La fonction mail &agrave; retourn&eacute;e [false]  ------<br />';
141                                        $erreur_message .='-------- MESSAGE erreur : -------------<br />';
142                                        $erreur_message .=$message ;                            // Bad recipient address syntax
143                                $pos1 = strpos(strtolower($message), 'bad recipient address syntax');
144                                if (  !($pos1 === false) ){
145                                $erreur_message .='D&eacute;tection de : Bad recipient address syntax .';
146                                        $erreur_message .='V&eacuterifiez les destinataires: (Bcc,Cc,To)<br />';
147                                        }
148                                        $erreur_message .='mailto:   "'.$mailto.'"<br />';
149
150                                        $erreur_message .='--------HEADERS -----------------<br />
151                                        ';
152                                        $erreur_message .=$headers ;
153                                       
154
155                                }
156                       
157                }else{
158                //--- Détection de spam ------------------
159                       
160                        if ($mails_données['nb_spams']==0) {  $mails_données['date_spam']= time();      }
161                        $mails_données['nb_spams'] += $nb_destinataires;
162                       
163                        $est_un_spam =!(strpos(strtolower($message), 'trop de spam') === false);
164                       
165                        if ( $est_un_spam ) { 
166                            $mails_données['quarantaine']=true;
167                                 $spams_periode="+".str_replace($search, $replace, $mails_données['nb_spams_periode']);
168                               
169                                        $next_day =  strtotime(  $spams_periode);
170                                       
171                        //      $next_day =  strtotime('+2 day');
172                                $mails_données['date_quarantaine']= $next_day       ;                   
173                        }
174                        else
175                        {
176                        $mails_données['quarantaine']= ($mails_données['nb_spams'] >= $mails_données['nb_spams_maxi']);
177                }
178                //      $next_day = time() + (2 * 24 * 60 * 60);
179                        if ($mails_données['quarantaine']) 
180                                {
181                                $erreur_message .= "ALERTE !!! DANGER DE MISE EN QUARANTAINE  <br />" ;
182                                $erreur_message .=  "Vous avez d&eacute;pass&eacute; le nombre de spmas admissibles. <br /> <br />";
183                                }
184                        $erreur_message .="<br> Detection $message <br />".
185                                "Nombre de spams d&eacute;tect&eacutes; ".$mails_données['nb_spams'];
186                        }
187 
188        }else{
189                //======== Mise en quarantaine       =============
190$erreur_message =  '<br />
191Nous sommes le :       '. date('d-M-Y H:m:s') ."<br />";
192
193                if      ($reste >= 0) {
194$erreur_message .=
195"MISE EN QUARANTAINE !"."<br />".
196"Nombre de spams envoy&eacute;s :". $mails_données['nb_spams']."<br />".
197"Depuis le               :". date('d-M-Y H:m:s',$mails_données['date_spam'])."<br />".         
198"Il vous reste encore ". int_to_heure($mails_données['reste'])  . " avant le d&eacute;blocage par votre FAI<br />
199  qui devrait avoir lieu le ".date('d-M-Y H:m:s',$mails_données['date_quarantaine'])."." ;
200               
201                }
202                       
203                $erreur_message .=  '</pre>'.
204                '
205         
206          '.
207        "Dernier message re&ccedil;u.:<br />". $mails_données['message']. "<br /> ";
208          $ret = "break";
209 }
210
211  sauve_données();
212 $ret=true;
213 
214 return $ret ;
215 
216}
217
218//==========================================================================================
219function admin_menu($menu)
220{
221    array_push($menu, array('NAME' => 'Mail_Superv',
222      'URL' => get_admin_plugin_menu_link(MAIL_SUPERV_PATH . 'admin/mail_superv_admin.php')));
223    return $menu;
224}
225
226
227add_event_handler('get_admin_plugin_menu_links', 'admin_menu');
228//add_event_handler('loc_end_page_tail', 'affiche_message');
229add_event_handler('loc_after_page_header', 'affiche_message');
230
231?>
Note: See TracBrowser for help on using the repository browser.