User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

php:mail-tree [2020-02-15 00:57] (current)
Line 1: Line 1:
 +======Small utilite for show mail aliases tree======
 +
 +
 +===DB structure===
 +
 +<​code>​
 +table aliases {
 +  username;
 +  domain;
 +  sendto;
 +}
 +
 +table boxes {
 +  username;
 +  domain;
 +}
 +</​code>​
 +
 +===Code===
 +
 +<code php alias2tree.php>​
 +#​!/​usr/​local/​bin/​php
 +<?php
 +
 +function print_mail ($dbcon, $email, $level) {
 +
 +  if ($level > 8) {
 +      print str_repeat("​|\t",​ $level)."​| *** too many level for $email ***\n";​
 +  } else {
 +
 +    $exist = 0;
 +
 +    list($username,​ $domain) = explode("​@",​ $email);
 +
 +    $query = "​select distinct username, domain from boxes where username = '​$username'​ and domain = '​$domain'​ and is_active = '​Y';";​
 +    $mb_table = mysqli_query($dbcon,​ $query);
 +
 +    if (mysqli_num_rows($mb_table) > 0) {
 +      while ($mb_row = mysqli_fetch_assoc($mb_table)) {
 +        $mb = $mb_row['​username'​].'​@'​.$mb_row['​domain'​];​
 +        print str_repeat("​|\t",​ $level)."​*** "​.$mb."​\n";​
 +      }
 +      $exist++;
 +    }
 +    mysqli_free_result($mb_table);​
 +
 +    $query = "​select distinct username, domain, sendto from aliases where username = '​$username'​ and domain = '​$domain'​ and is_active = '​Y';";​
 +    $table = mysqli_query($dbcon,​ $query);
 +
 +    if (mysqli_num_rows($table) > 0) {
 +      print str_repeat("​|\t",​ $level)."​==>​ "​.$email."​ :\n";
 +      while ($row = mysqli_fetch_assoc($table)) {
 +        $sendto = $row['​sendto'​];​
 +
 +        print_mail($dbcon,​ $sendto, $level+1);
 +
 +      }
 +      mysqli_free_result($table);​
 +      print str_repeat("​|\t",​ $level)."​\n";​
 +      $exist++;
 +    }
 +    if ($exist = 0) {
 +      print str_repeat("​|\t",​ $level)."​!!! $email\n";​
 +    }
 +  }
 +}
 +
 +
 +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);​
 +
 +
 +$con = mysqli_connect("​127.0.0.1","​root"​) or die("​Could not connect: " . mysql_error());​
 +printf("​Connected successfully\n"​);​
 +
 +mysqli_select_db($con,​ '​mail2'​) or die('​Could not select database'​);​
 +printf("​Select db successfully\n"​);​
 +
 +
 +$query = "​select distinct username, domain from aliases where is_active = '​Y';";​
 +
 +$table = mysqli_query($con,​ $query);
 +$count_rows = mysqli_num_rows($table);​
 +printf("​count rows = %d\n", $count_rows);​
 +
 +while ($row = mysqli_fetch_assoc($table)) {
 +    $username = $row['​username'​];​
 +    $domain = $row['​domain'​];​
 +    $email = $username.'​@'​.$domain;​
 +
 +    $q = "​select username, domain from aliases where sendto = '​$email'​ and is_active = '​Y'​ limit 3;";
 +    $t = mysqli_query($con,​ $q);
 +    if (mysqli_num_rows($t) == 0) {
 +//        print $email."​ =>​\n";​
 +        print_mail($con,​ $email, 0);
 +
 +    }
 +    mysqli_free_result($t);​
 +}
 +
 +mysqli_free_result($table);​
 +mysqli_close($con);​
 +
 +//EOF
 +</​code>​
 +===Output example===
 +
 +<​code>​
 +==> all.nw@nw.domain.com :
 +| *** a.kuznetsov@domain.com
 +| ==> arkh.do@nw.domain.com :
 +| | ==> arkh.salon@nw.domain.com :
 +| | | *** atrium-sev@nw.domain.com
 +| | | *** bum-arkh@nw.domain.com
 +| | | *** dirarkhangelsk@nw.domain.com
 +| | | *** dombita-arkh@nw.domain.com
 +| | | *** forum-arkh@nw.domain.com
 +| | | *** m.imperia-arkh@nw.domain.com
 +| | | *** o.potemkina@domain.com
 +| | | *** omega-sev@nw.domain.com
 +| | | *** urs1-arkh@nw.domain.com
 +| |
 +| | *** buhg-arkh@nw.domain.com
 +| | *** dirarkhangelsk@nw.domain.com
 +| | *** dispserv-arkh@nw.domain.com
 +| | *** it-arkh@nw.domain.com
 +| | *** manserv-arkh@nw.domain.com
 +| | *** nachsklad-arkh@nw.domain.com
 +| | *** nss-arkh@nw.domain.com
 +| | *** urs1-arkh@nw.domain.com
 +
 +*** etika@domain.com
 +==> etika@domain.com :
 +| *** ethics@domain.com
 +| ==> ethics@domain.com :
 +| | *** e.epifanceva@domain.com
 +| | *** vitaliy@domain.com
 +|
 +
 +==> ezhergin_rj@domain.com :
 +| *** ezhergin1@domain.com
 +| *** ezhergin2@domain.com
 +| *** ezhergin3@domain.com
 +
 +==> ftp@domain.com :
 +| ==> root@domain.com :
 +| | *** sysmaster@domain.com
 +|
 +
 +==> ftp-bugs@rnd.domain.com :
 +| ==> ftp@rnd.domain.com :
 +| | ==> root@rnd.domain.com :
 +| | | *** cr3w@rnd.domain.com
 +| | | ==>​ cr3w@rnd.domain.com :
 +| | | | *** roman1c@rnd.domain.com
 +| | | | *** v.kuchma@rnd.domain.com
 +| | |
 +| |
 +|
 +
 +==> g.slavov@nw.domain.com :
 +| *** office@nw.domain.com
 +</​code>​
 +
 +