Resumo de utilização de uma conta de Email

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

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *