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

Last change on this file since 4721 was 4715, checked in by cljosse, 14 years ago

[mail_supervisor] Add option for new register

File size: 11.2 KB
Line 
1<?php
2/*
3Plugin Name: Mail supervisor
4Version: 1.3.1
5Description: Mail supervisor surveille l'envoie des mails.
6Plugin URI: http://piwigo.org/ext/extension_view.php?eid=315
7Author: cljosse
8Author URI:http://cljosse.free.fr
9*/
10if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
11if (!defined('MAIL_SUPERV_DIR')) define('MAIL_SUPERV_DIR' , basename(dirname(__FILE__)));
12if (!defined('MAIL_SUPERV_PATH')) define('MAIL_SUPERV_PATH' , PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/');
13include_once (MAIL_SUPERV_PATH.'include/constants.php'); 
14
15/* EVENT_HANDLER_PRIORITY_NEUTRAL  */
16
17
18
19global  $superv_champs , $superv_type ,$superv_bl_champs , $superv_bl_type ; 
20          $superv_champs = array(
21                       "id",
22                                        "nb_mails",
23                                        "date_mail",
24                                        "nb_mails_maxi",               
25                                        "nb_mails_periode",     
26                                        "nb_spams",
27                                        "date_spam",   
28                                        "nb_spams_maxi",       
29                                        "nb_spams_periode",     
30                                        "quarantaine",
31                                        "date_quarantaine",
32                                        "quarantaine_periode", 
33                                        "message", 
34                                        "message_test", 
35                                    "header_text",
36                               
37                                        );
38                                       
39        $superv_type = array(
40                        " SMALLINT( 5 ) NOT NULL DEFAULT '0'"      ,
41                                        "INT NOT NULL DEFAULT '0'"  ,
42                                        "INT NOT NULL DEFAULT '0'"  ,
43                                        "INT NOT NULL DEFAULT '2000'",         
44                                        "TEXT"  ,       
45                                        "INT NOT NULL DEFAULT '0'",
46                                        "INT NOT NULL DEFAULT '0'",     
47                                        "INT NOT NULL DEFAULT '10'",   
48                                        "TEXT"  ,       
49                                        "TEXT" ,
50                                        "INT NOT NULL DEFAULT '0'",
51                                        "TEXT"  ,       
52                                        "TEXT"  , 
53                                        "TEXT"  , 
54                                        "TEXT"  ,
55                                       
56                                        );             
57                                       
58 
59          $superv_bl_champs = array(
60                                        "id",
61                                        "ip",
62                                        "pays",
63                                        "region",               
64                                        "ville",       
65                                        "adresse",
66                                        "fai", 
67                                        "nb"
68                                        );
69                                       
70        $superv_bl_type = array(
71                        " smallint(5) UNSIGNED NOT NULL auto_increment ",
72                                        "TEXT"  ,
73                                        "TEXT"  ,
74                                        "TEXT"  ,
75                                        "TEXT"  ,
76                                        "TEXT"  ,
77                                        "TEXT"  ,
78                                        " smallint(5) UNSIGNED "
79                                        );                                                                                                                                     
80
81 global $conf ;
82 
83add_event_handler('send_mail', 'clj_mail',EVENT_HANDLER_PRIORITY_NEUTRAL - 1 , 6);
84
85function clj_mail($result, $mailto, $subject, $content, $headers, $args)
86{
87    global $conf, $user, $lang_info,  $conf_mail,$mails_options,$mails_données , $template,$page ,$erreur_message,$infos_message, $lang; 
88        // lecture config table -------------
89        include_once (MAIL_SUPERV_PATH.'include/fonctions.php'); 
90 load_language('plugin.lang', MAIL_SUPERV_PATH);
91 
92        $mails_options = explode("," , $conf['mail_superv']);
93
94        if ($mails_options[3]=='on' || $mails_options[4] == 'on' )
95        {
96                if (kill_list())
97                 {
98                  $erreur_message .= "<BR />".l10n('is_a_spam') ;
99                 if ($mails_options[4] == 'on' ){
100                        if ($user['status'] != 'webmaster'  )
101                                if (!isset($_GET['admin'])) {
102                                                 die('Blacklist : <br />' .$erreur_message. '<br /> Hacking attempt!');
103                                }elseif   ($_GET['admin'] != 'piwigo')
104                                        {
105                                                 die('blacklist Hacking attempt!');
106                                        }
107                  }
108                        return true;
109                 }
110        }
111       
112        $message ="";
113        if (!isset($infos_message))
114        {
115        $infos_message = "";
116        }
117if (!isset($erreur_message))
118        {
119        $erreur_message = '';
120        }
121        // lecture données       -------------
122    $mails_données = Get_Datas();
123
124       
125        $nb_mails         =     $mails_données['nb_mails'] ;
126        $next_day  =  $mails_données['date_mail'] ;
127       
128        $reste =    $mails_données['reste'] ;
129       
130       
131        $rest_mail =    $mails_données['rest_mail'] ;
132        if ($rest_mail <=0 || $mails_données['nb_mails'] ==0 ){
133           $mails_données['nb_mails'] =0 ;
134           $mails_données['date_mail'] = time();
135        }
136       
137        $rest_spam =    $mails_données['rest_spam'] ;
138        if ($rest_spam <=0 || $mails_données['nb_spams'] ==0 ){
139           $mails_données['nb_spams'] =0 ;
140           $mails_données['date_spam'] = time();
141        }
142       
143        $alerte =   ( $mails_données['reste'] >0 ) ? true : false ; 
144       
145        $alerte_mail =    ( $mails_données['nb_mails'] >   $mails_données['nb_mails_maxi']-1 ) ? true : false ;
146        $alerte_spam =    (  $mails_données['nb_spams'] >   $mails_données['nb_spams_maxi']-1 ) ? true : false ;
147       
148 
149 if ( ( !$alerte  && !$alerte_spam  && !$alerte_mail ) ) 
150        {
151                 
152  $nb_destinataires=0;
153                if ($mails_options[0] == 'on') {
154                        if ($mailto == "" )     $mailto = $conf_mail['email_webmaster'];
155                }   
156 if ($mailto<>"" )            $nb_destinataires +=1; 
157
158                if (!empty($args['Bcc']))  { 
159                        $nb_destinataires += count($args['Bcc']); 
160                        } 
161                if (!empty($args['Cc']))  {   
162                        $nb_destinataires += count($args['Cc']); 
163                        }
164   //================= réécriture de l'entête ===============================
165if ( $nb_destinataires  == 1 )
166        {
167                if ($mailto == "" ) 
168                  {
169                          if (!empty($args['Cc']) and count($args['Cc']) > 0 )  $mailto  = get_strict_email_list(implode(',', $args['Cc'])) ;
170                          if (!empty($args['Bcc']) and count($args['Bcc']) > 0 ) $mailto  = get_strict_email_list(implode(',', $args['Bcc'])) ;
171                         
172                                $headers = preg_replace('/.*Bcc(.*).\n/i', '', $headers);
173                                $headers = preg_replace('/.*Cc(.*).\n/i', '', $headers);
174                               
175                  }
176        }else{
177   
178 
179     }
180
181//=============================================================================         
182if (!empty($args['Cc']))
183                        {
184                         $headers= corrige_header('Cc',$headers,$args);
185                        }
186                if (!empty($args['Bcc']))
187                        {   
188                                   $headers     = corrige_header('Bcc',$headers,$args); 
189                        }
190//=============================================================================                 
191if ($mails_options[2]=='on')   {
192
193        $texte = "This is a multi-part message in MIME format.\n"; 
194       
195        $texte .= "-----=".$conf_mail['boundary_key']."\n"; 
196        $texte .= "Ceci est un message est au format MIME.\n"; 
197        $texte .= 'Content-Type: text/plain; charset="UTF-8"'."\n"; 
198        $texte .= 'Content-Transfer-Encoding: 8bit'."\n\n"; 
199        $texte .= $mails_données['header_text']; // A voir texte brut...
200           
201                $texte .= "\n\n"; 
202       
203                $content =$texte .$content ;
204}
205 
206$ret=false;
207       
208            //======== Non mise en quarantaine =============
209                ob_start();
210                $ret = false;
211                 if ($nb_destinataires > 0) {
212                   $ret = mail($mailto, $subject, $content, $headers);
213
214                        }else{
215                           $message .= l10n('no_receiver_available');
216                        }
217                        $message .= ob_get_contents();
218            ob_end_clean();
219                        $mails_données['message']=$message;     
220                        Gestion_erreurs($message,$ret,$nb_destinataires,$headers,$mailto);
221               
222       
223       
224        } else {
225
226        //================== Est en quarantaine =======================
227                $erreur_message .=      l10n('To_day_is')."<br />";
228                        if ($alerte_spam ) { 
229                        $type="Spams";
230                               
231                                $d1=$mails_données['nb_spams'] . '  \\  ' . $mails_données['nb_spams_maxi'];
232                                $d2=$mails_données['nb_spams'];
233                                $d3= $mails_données['rest_spam'];
234                                $d4=time()+$d3 ;
235                        } 
236 
237                        if ($alerte_mail) {
238                        $type="Mails";
239                       
240                                $d1=$mails_données['nb_mails']. '  \\  ' . $mails_données['nb_mails_maxi'];;
241                                $d2=$mails_données['date_mail'];
242                                $d3= $mails_données['rest_mail'];
243                                $d4=time()+$d3 ;
244                               
245                               
246                        }
247                        if ($alerte) {
248                        $type="Spams(Quarantaine)";
249                                $d1=$mails_données['nb_spams'] . '  \\  ' . $mails_données['nb_spams_maxi'];
250                                $d2=$mails_données['date_quarantaine'];
251                                $d3= $mails_données['reste'];
252                                $d4=time()+$d3 ;
253                        } 
254
255
256$d2=date(l10n('formatdate'),$d2);
257$d3=int_to_heure($d3) ;
258$d4=date(l10n('formatdate'),$d4);
259
260        if ($alerte_mail) {
261              $erreur_message .='<br />'.sprintf(l10n('alerte_mail %s %s %s %s %s'),$type,$d1,$d2,$d3,$d4).'<br />';
262                }else{
263                           $erreur_message .='<br />'.sprintf(l10n('mise_en_quarantaine %s %s %s %s %s'),$type,$d1,$d2,$d3,$d4).'<br />';
264
265                }
266 $infos_message = l10n('mail_not_send');
267 
268 }                     
269 sauve_données();
270 return true ;
271}
272//===========================================================================================   
273function Gestion_erreurs($message,$ret,$nb_destinataires,$headers,$mailto)
274{                       
275         global $conf, $user,  $conf_mail,$mails_options,$mails_données , $template,$page ,$infos_message,$erreur_message,$args,$lang, $lang_info; 
276
277         
278         
279    $match=array("<",">");
280    $string=array("&lt;","&gt;") ;       
281
282//Warning: mail() has been disabled for security reasons
283       
284        $est_un_spam =!(strpos(strtolower($message), 'spam') === false);
285        $headers=str_replace( $match,$string, $headers); 
286       
287        if ( ($ret==false) || ($est_un_spam==true) || ($nb_destinataires == 0) ) {
288                 ;                              // Bad recipient address syntax
289                $pos1 = strpos(strtolower($message), 'bad recipient address syntax');
290                if (  !($pos1 === false) ){
291                        $erreur_message .= l10n('detection_de').' : Bad recipient address syntax .';
292                        $erreur_message .= l10n('verifiez_les_destinataires').' (Bcc,Cc,To)<br />';
293                        }       
294       
295        $erreur_message .= sprintf(l10n('debug_message %s %s %s %s %s'),($ret==true)? "true" : "false",$message,$mailto,$headers,$nb_destinataires);
296       //=============== La fonction mail à retournéeune erreur =========================               
297
298                               
299                                }       
300                               
301        if ($est_un_spam == false) 
302                        {
303                        if ($mails_données['nb_mails']==0) {    $mails_données['date_mail'] =  time();  }       
304                        $mails_données['nb_mails'] += $nb_destinataires;
305                        }
306                        else
307                        {
308                                $mails_données['nb_spams'] += $nb_destinataires;                       
309                            //--- Détection de spam ------------------
310                                if ($mails_données['nb_spams']==0) {$mails_données['date_spam'] = time();       }
311
312                                $trop_de_spam =!(strpos(strtolower($message), 'trop de spam') === false);
313                                if ( $trop_de_spam ) {
314                                                $mails_données['nb_spams_maxi']=$mails_données['nb_spams'];
315
316                                                $mails_données['date_quarantaine']= time()  ;   
317                                                $mails_données['quarantaine']= true    ;       
318                                                $infos_message .=memo_var($mails_données);
319                                        }
320
321                        }
322 
323 
324
325 
326 $ret=true;
327 return $ret ;
328 
329}
330
331//==========================================================================================
332add_event_handler('get_admin_plugin_menu_links', 'admin_menu');
333function admin_menu($menu)
334{
335    array_push($menu, array('NAME' => 'Mail_Superv',
336      'URL' => get_admin_plugin_menu_link(MAIL_SUPERV_PATH . 'admin/mail_superv_admin.php')));
337    return $menu;
338}
339//==========================================================================================
340add_event_handler('loc_after_page_header','affiche_spam' );//
341function affiche_spam ()
342
343{
344include_once (MAIL_SUPERV_PATH.'include/fonctions.php'); 
345
346  affiche_message();
347   
348}
349
350        $mails_options = explode("," , $conf['mail_superv']);
351         
352//==========================================================================================
353if ($mails_options[7]=='on'  ) {
354 add_event_handler('register_user_check', 'Test_spam_g', EVENT_HANDLER_PRIORITY_NEUTRAL +2  , 2);
355 }
356function Test_spam_g ($err, $user)
357{
358
359if (count($err)!=0 ) return $err ; 
360if ( !isset($_POST['submit_add']) && !isset($_POST['submit'])  ) return $err ; 
361//Liableelard
362include_once (MAIL_SUPERV_PATH.'include/fonctions.php');
363if ( isset($_POST['submit'])) {
364        $mail  =  $_POST['mail_address'] ;
365        $user_name = $_POST['login'] ;
366}else{
367        $mail  = $user['email'];
368        $user_name = $user['username'];
369}
370$user_name ="";
371 $ip='0'; 
372                if (test_spam($ip,$user_name ,$mail ))
373                 { 
374                 if (test_spam($ip,$user_name ,"" )) {
375                  $err[] = $user_name . " ". l10n('is_a_login_spam')   ;
376                 }else           
377                    $err[] = $user_name . " : " .$mail . " ". l10n('is_a_spam')   ;
378                 }
379                 
380return $err ; 
381}
382?>
Note: See TracBrowser for help on using the repository browser.