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:
- --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(); ?>