Lister les plus gros dossiers d'un compte IMAP en PHP
- 07/03/2014
PHP://
Lister les plus gros dossiers d'un compte IMAP en PHPJ'avais besoin de nettoyer un compte IMAP pleins de dossiers, donc de trouver les plus gros d'entre eux aisément. Autant donc confier cela à un robot :
L'appel type est du genre
<?php
$a = array('url' => 'mail.serveur.com', 'params' => '/imap/tls/readonly', 'compte' => 'moncompte', 'mdp' => 'monmdp');
$oMesure = new CMesurerIMAP();
$oMesure->Afficher($oMesure->Collecter($a));
Les paramètres doivent certainement adaptés en fonction de votre compte (/tls ou /notls, /novalidate-cert pour les serveurs avec un certificat invalide/autosigné notamment).
Enjoy si cela peut aider quelqu'un.
<?php
class CMesurerIMAP
{
function cmp($a, $b)
{
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
}
function cmpDossiers(array $aA, array $aB)
{
$id = $GLOBALS['sort_id'];
return $this->cmp($aB[$id], $aA[$id]);
}
function afftaille($taille)
{
$mesures = array('o', 'ko', 'Mo', 'Go');
$i=0;
while($taille>1024)
{
$taille=$taille/1024;
$i++;
}
return round($taille, 2).$mesures[$i];
}
function Collecter(array $aConnexion)
{
$mbox = imap_open(sprintf('{%s%s}INBOX', $aConnexion['url'], $aConnexion['params']), $aConnexion['compte'], $aConnexion['mdp']) or die('imap_open');
$list = imap_list($mbox, '{' . $aConnexion['url'] .'}', '*') or die('imap_list');
//$list = array_slice($list, 0, 10); //DEBUG
$aDossiers = array();
foreach ($list as $sChemin) {
imap_reopen($mbox, $sChemin);
$aData = imap_mailboxmsginfo($mbox);
$sKey = str_replace('{' . $aConnexion['url'] .'}', '', imap_utf7_decode($sChemin));
$aDossiers[$sKey] = array(
'nb' => $aData->Nmsgs,
'nbNonLu' => $aData->Unread,
'nbSupprimes' => $aData->Deleted,
'taille' => $aData->Size,
);
}
imap_close($mbox, CL_EXPUNGE);
$GLOBALS['sort_id'] = 'taille';
uasort($aDossiers, array($this, 'cmpDossiers'));
return $aDossiers;
}
function Afficher(array $aDossiers)
{
$aDossiers = array_slice($aDossiers, 0, 20);
$iTailleTotale = 0;
echo '<ul>';
foreach($aDossiers as $sNom => $aInfos) {
$a = array();
foreach($aInfos as $key => $val) {
if($key == 'taille') {
$iTailleTotale += $val;
$val = $this->afftaille($val);
}
$a[] = sprintf('%s: %s', $key, $val);
}
printf('<li><b>%s</b> %s</li>', $sNom, implode(', ', $a));
}
echo '</ul>';
echo "Total : " . $this->afftaille($iTailleTotale);
}
}
Rubriques des billets
- Agilité (22)
- Archerie (10)
- Avis (74)
- Cultures (22)
- Délires (44)
- Démocrachie (11)
- Développement (59)
- Développement web (36)
- Ergonomie (20)
- Geekerie (12)
- Inclassable (6)
- Informatique (27)
- Japon (9)
- Littératures (39)
- PHP (12)
- Poor Lonesome Coder (31)
- Régalons-nous (6)
- Sortons! (3)
- Travail (20)
- Vivre mieux (40)
- Voyages (4)
- Webmasteriat (20)
Commentaires(s)
Ecrire votre commentaire
07/03/2014 - Systeme