Benutzer-Werkzeuge

Webseiten-Werkzeuge


php:imap

Dies ist eine alte Version des Dokuments!


E-Mails aus IMAP-Konto mit PHP auslesen

Mit PHP ist es sehr einfach möglich, auf die E-Mails in einem E-Mail-Konto zuzugreifen und deren Inhalte auszulesen. Mit der nachfolgenden PHP-Klasse können IMAP-Konten ausgelesen werden. Voraussetzung hierfür ist, dass PHP mit der Erweiterung „imap“ installiert wurde:

Sollte die Erweiterung nicht installiert sein suchen Sie in der php.info nach der Zeile „;extension=php_imap.dll“ und entfernen Sie das vorangestellte Semikolon „;“.

Tragen Sie in der folgenden PHP-Klasse den Server, Usernamen und das Passwort für das abzufragende E-Mail-Konto ein.

class.imap.php
class imap
{
    private $server     = '';
    private $username   = '';
    private $password   = '';
 
    /**
     * @var resource $stream
     */
    private $stream = NULL;
 
    public function getEmails( $onlyUnread = false )
    {
        $mailbox = sprintf( "{%s:143}INBOX", $this->server );
        $this->stream = imap_open( $mailbox, $this->username, $this->password );
        $MC = imap_check( $this->stream );
        $emails = imap_fetch_overview( $this->stream, "1:{$MC->Nmsgs}", 0 );
 
        if( $onlyUnread ) // nur ungelesene E-Mails
        {
            foreach( $emails as $key=>$email )
            {
                if( $email->seen ) // Email wurde bereits gelesen
                {
                    unset( $emails[$key] ); // Email aus Liste entfernen
                }
            }
        }
 
        return $emails;
    }
 
    public function getEmailBody( $uid )
    {
        $body = imap_fetchbody( $this->stream, $uid, 1 );
        return imap_qprint( $body );
    }
 
    public function close()
    {
        imap_close( $this->stream );
    }
}

Hinweis: Sobald eine E-Mail mit der Funktion „imap_fetchbody“ ausgelesen wurde wird sie automatisch als „gelesen“ (seen = 1) gekennzeichnet. Bei einem erneuten Aufruf von „getEmails( true)“ werden diese E-Mails nicht mehr mit ausgegeben.

Beispiel

$imap = new imap();
$emails = $imap->getEmails( true );
$bodies = [];
 
foreach( $emails as $email )
{
    $bodies[] = $imap->getEmailBody( $email->uid );
}
$imap->close();
 
print_r( $bodies );

Mit regulären Ausdrücken wäre es jetzt z. B. Möglich, den Inhalt der E-Mails nach bestimmten Inhalten zu parsen.

php/imap.1603033904.txt.gz · Zuletzt geändert: 2020/10/18 17:11 von webproducer