Resumo de utilização de uma conta de Email

Anderson Irias - 20/02/2021

Neste artigo, trago um script escrito em PHP, que gera um relatório com o resumo de utilização de uma conta de email. O script realiza a conexão na caixa postal via IMAP. Ele lista todas as pastas da caixa postal e apresenta o total de mensagens na pasta, o número de mensagens não lidas e o tamanho utilizado em Bytes.

Conexão IMAP

O IMAP (Internet Message Access Protocol), é um método de acesso entre um servidor de emails e um cliente de emails. No script vamos utilizar a extensão IMAP do PHP. Para instalar esta extensão no terminal Linux utilize o comando:

sudo apt install php-imap

Algoritmo em PHP

Para utilizar o script precisamos do PHP 7 instalado, também precisamos da extensão que instalamos anteriormente. Nosso script foi criado para ser utilizado através do terminal Linux, mas o mesmo pode ser facilmente adaptado para funcionar em uma página Web.

Pelo terminal Linux vamos rodar o script com o PHP passando os parâmetros:

O comando ficará do seguinte formato:

php mailboxSummary.php --host imap.meuservidor.com.br --user email@meuservidor.com.br --password senhadomeuemail

Abaixo o script completo.

<?php class MailboxSummary { private $mbox; private $host; private $user; private $password; public function setHost(string $host) : void { $this->host = $host; } public function setUser(string $user) : void { $this->user = $user; } public function setPassword(string $password) : void { $this->password = $password; } public function getScriptParameters() : array { return getopt("", array("host:", "user:", "password:")); } public function openMailbox() : void { $this->mbox = imap_open( "{". $this->host .":143/novalidate-cert}INBOX", $this->user, $this->password ); if (!$this->mbox) { print_r(imap_errors()); exit(); } } public function listFoldersMailbox() : void { $folderList = imap_getmailboxes( $this->mbox, "{" . $this->host . "}", "*" ); if (!$folderList) { echo "\n\n"; $this->closeMailbox(); exit("Falha ap obter a lista de pastas: ". imap_last_error()); } else { echo "\n\n"; echo ("Lista de pastas da conta de e-mail"); foreach ($folderList as $info) { $this->printInfoQuotaOtherFolders($info); } }
} public function printInfoQuotaRoot() : void { $quotaInfo = imap_get_quotaroot($this->mbox, "INBOX");

if (!$quotaInfo) {
  echo "\\n\\n";
  echo "Falha ao obter tamanho total da conta e a quantidade já utilizada";
} else {
  echo "\\n\\n";
  echo "Tamanho total da conta de e-mail em KB: ". $quotaInfo\['STORAGE'\]\['limit'\];
  echo "\\n";
  echo "Quantidade utilizada em KB: ". $quotaInfo\['STORAGE'\]\['usage'\];  
}

} public function printInfoQuotaOtherFolders(object $info): void { echo "\n\n"; echo str_replace("{" . $this->host . "}", "", $info->name) ."\n";

$folderInfo = $this->getOtherFolderInfo($info->name);

if ($folderInfo) {
  echo "Total de mensagens: " . $folderInfo->Nmsgs . "\\n";
  echo "Mensagens não lidas:" . $folderInfo->Unread . "\\n";
  echo "Tamanho total: ". $folderInfo->Size . " Bytes\\n";
} else {
  echo "Erro ao obter os detalhes das pasta: " . $info->name . ". " . imap\_last\_error();
}

} public function getOtherFolderInfo(string $folderName) { $folder = str_replace("}", ":143/novalidate-cert}", $folderName); $mboxFolder = imap_open($folder, $this->user, $this->password); if (!$mboxFolder) { return false; } $info = imap_mailboxmsginfo($mboxFolder); imap_close($mboxFolder); return $info; } public function closeMailbox() : void { imap_close($this->mbox); } } $mailboxSummary = new MailboxSummary(); $parameters = $mailboxSummary->getScriptParameters(); $mailboxSummary->setHost($parameters['host']); $mailboxSummary->setUser($parameters['user']); $mailboxSummary->setPassword($parameters['password']); $mailboxSummary->openMailbox(); $mailboxSummary->printInfoQuotaRoot(); $mailboxSummary->listFoldersMailbox(); $mailboxSummary->closeMailbox(); ?>