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:
- –host: Endereço do servidor IMAP
- –user: Usuário para conexão, normalmente a conta de email em questão.
- –password: Senha da conta de email.
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(); ?>