119 lines
3.7 KiB
PHP
119 lines
3.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Lists emails
|
|
* Stats pop / alias
|
|
* Checks SMTP / SIEVE
|
|
*/
|
|
class Alternc_Diagnostic_Service_Mail
|
|
extends Alternc_Diagnostic_Service_Abstract
|
|
implements Alternc_Diagnostic_Service_Interface
|
|
{
|
|
|
|
public $name = "email";
|
|
|
|
protected $mailList = array();
|
|
|
|
const SECTION_LIST = "list";
|
|
const SECTION_STAT_ALIAS = "stat_alias";
|
|
const SECTION_CHECK_STORAGE = "check_storage";
|
|
|
|
function run(){
|
|
|
|
// Attempts to retrieve all email addresses
|
|
$this->mailList = $this->getList();
|
|
|
|
// Writes the domains list
|
|
$this->writeSectionData (self::SECTION_LIST,$this->getList());
|
|
|
|
// Writes the alias stats
|
|
$this->writeSectionData (self::SECTION_STAT_ALIAS,$this->getStatAlias());
|
|
|
|
// Writes the quota stats
|
|
$this->writeSectionData (self::SECTION_CHECK_STORAGE,$this->getCheckStorage());
|
|
|
|
|
|
return $this->data;
|
|
}
|
|
|
|
/**
|
|
* Gets list from db
|
|
*
|
|
* @return array
|
|
*/
|
|
function getList(){
|
|
|
|
$returnArray = array();
|
|
// Check the availability
|
|
$this->db->query('
|
|
SELECT CONCAT(a.address,"@",d.domaine) as email, a.type, a.enabled, r.recipients, m.path,m.quota,m.bytes/(1024*1024) as size_mo,m.messages
|
|
FROM address a
|
|
LEFT JOIN recipient r ON r.address_id = a.id
|
|
LEFT JOIN mailbox m ON m.address_id = a.id
|
|
JOIN domaines d ON a.domain_id = d.id;');
|
|
if ($this->db->num_rows()) {
|
|
while ($this->db->next_record()) {
|
|
$email = $this->db->f("email");
|
|
$returnArray[$email] = array(
|
|
"enabled" => $this->db->f("enabled"),
|
|
"type" => $this->db->f("type"),
|
|
"recipients" => $this->db->f("recipients"),
|
|
"path" => $this->db->f("path"),
|
|
"quota" => $this->db->f("quota"),
|
|
"size_mo" => $this->db->f("size_mo"),
|
|
"messages" => $this->db->f("messages"),
|
|
);
|
|
}
|
|
}
|
|
return $returnArray;
|
|
}
|
|
/**
|
|
* Searches mails with alias
|
|
*
|
|
* @return array
|
|
*/
|
|
function getStatAlias() {
|
|
$returnArray = array();
|
|
foreach ($this->mailList as $email => $emailInfo) {
|
|
$is_alias = false;
|
|
if( !is_null($emailInfo["recipients"])){
|
|
$is_alias = true;
|
|
}
|
|
$returnArray[$email] = $is_alias;
|
|
}
|
|
return $returnArray;
|
|
|
|
}
|
|
|
|
/**
|
|
* Checks the box oversize and effective existence
|
|
*
|
|
* @return array
|
|
*/
|
|
function getCheckStorage() {
|
|
$returnArray = array();
|
|
foreach ($this->mailList as $email => $emailInfo) {
|
|
// Only account real boxes
|
|
if( ! $emailInfo["path"]){
|
|
continue;
|
|
}
|
|
$quota_pct = "0";
|
|
$box_exists = true;
|
|
$quota = $emailInfo["quota"];
|
|
$size_mo = $emailInfo["size_mo"] ;
|
|
if( $quota > 0 ){
|
|
$quota_pct = $size_mo * 100 / $quota;
|
|
}
|
|
if( !is_dir($emailInfo["path"]) ){
|
|
$box_exists = false;
|
|
}
|
|
$returnArray[$email] = array(
|
|
"percent" => number_format($quota_pct, 2),
|
|
"box_exists" => $box_exists
|
|
);
|
|
}
|
|
return $returnArray;
|
|
|
|
}
|
|
|
|
} |