Čtení emailů přes IMAP v PHP

V dnešním článku se zaměříme na to, jak zpracovat příchozí e-maily. Pokud potřebujete deaktivovat odběratele newsletteru, kteří mají nedostupnou schránku a vám se vrací emaily o nedoručitelnosti, je řešením takovéto emaily projít a adresu odstranit. Nemusíme to však dělat ručně, dá se to zautomatizovat.

Předpokládám, že na odesílání newsletteru se bude používat spíše samostatná schránka, něco jako no-reply@domena.cz. Pokud by se používala nějaká pracovní, tak by se mohlo stát, že byste prošvihli e-mail o nedoručení, který jste prošvihnout nechtěli.

Následující skript se tedy nejprve připojí do schránky přes imap. Projde všechny zprávy a přečte si jejich obsah. V textu zprávy najde všechny e-mailové adresy, vyloučí ty, které mají co dočinění s doménou odesílatele, a naznačí zpracování co se s těmi adresami dá udělat, typicky smazat nebo deaktivovat.

$mbox = imap_open("{imap.domena.cz:143/notls}Inbox", "jmeno", "heslo") or die();
$MC = imap_check($mbox);
$result = imap_fetch_overview($mbox,"1:{$MC->Nmsgs}",0);
foreach ($result as $overview) {
  $uid=$overview->uid;
  if ($overview->from == "MAILER-DAEMON@domena.cz") {
    $zprava=imap_fetchbody($mbox,$uid,1,FT_UID);
    $pattern = '/[a-z0-9_\-\+]+@[a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i';
    preg_match_all($pattern, $zprava, $matches);
    foreach ($matches[0] as $email) {
      if (strpos($email,'domena')===false) {
        --- /zkontroluj email v databázi a pokud najdeš shodu/ {
          --- /smaž nebo deaktivuj/
          imap_delete($mbox,$uid,FT_UID);
          break;
        }
      }
    }
  }
}
imap_expunge($mbox);
imap_close($mbox);