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