IMAP-Mail-Konto mit PHP & RSS checken

20. Februar 2008 @ 16:08 | PHP, Web 2.0

Vor einiger Zeit suchte ich eine einfache Möglichkeit um im Büro meine privaten E-Mail-Konten im Blick zu behalten.
Hierfür habe ich mir mit PHP einen kleinen RSS Feed-Generator geschrieben, welcher über das IMAP4-Protokoll meine Mailaccounts überprüft. Zusammen mit einem Feed-Reader wie RSSOwl ergibt sich so eine handliche kleine Mail-Checker-Maschine.

Der Code

<?
    if(!$a) $a=0;
    $accounts[0][user] = "meine.erste@adresse.com";
    $accounts[0][pass] = "meinErstesPasswort";
    $accounts[0][server] = "mail.ersterserver.com";
    $accounts[1][user] = "meine.zweite@adresse.com";
    $accounts[1][pass] = "meinZweitesPasswort";
    $accounts[1][server] = "mail.zweiterserver.com";
    $webmailUrl = "http://www.meinwebmail.com";
    $mbox = imap_open("{$accounts[$a][server]:143}INBOX", $accounts[$a][user], $accounts[$a][pass]);
    $messages = imap_search($mbox, "UNSEEN");
    echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title><? echo $accounts[$a][user]; ?></title>
        <link>$webmailUrl</link>
        <description>E-Mailchecker für <? echo $accounts[$a][user]; ?></description>
        <language>de-ch</language>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>
        <generator>RSS IMAPChecker by msites.net</generator>
        <managingEditor>just me</managingEditor>
        <webMaster>just me</webMaster>
<?
    if($messages) {
        foreach($messages as $msgid) {
            $header = imap_headerinfo($mbox, $msgid);
            echo "        <item>\n";
            echo "            <title><![CDATA[". $header->subject. "]]></title>\n";
            echo "            <link>$webmailUrl</link>\n";
            echo "            <pubDate>". $header->date. "</pubDate>\n";
            echo "            <dc:creator><![CDATA[". $header->fromaddress. "]]></dc:creator>\n";
            echo "            <content:encoded><![CDATA[<a href=\"$webmailUrl\" target=\"_blank\">Check Webmail...</a>]]></content:encoded>\n";
            echo "        </item>\n";
        }
    }
?>
    </channel>
</rss>

Die Erklärung

Über das Array $accounts können mehrere E-Mail-Konten definiert werden. Benutzername, Passwort und Server sind hier hart kodiert.

Der darauffolgende Code dient dazu, "UNSEEN"-Mails per IMAP abzufragen und daraus einen RSS-Konformen Feed zu erstellen. Jeder Feedeintrag repräsentiert hierbei eine E-Mail.

Als kleine Komfortfunktion wird als Link für die Feedentries das per $webmailUrl definierte Webmail-Clients verwendet.
Somit reicht ein Doppelklick auf den Feed-Eintrag (in RSSOwl zumindest ist das so) um das Webmail-Login aufzurufen.

Die Verwendung

Im Feed-Reader schlussendlich wird jetzt ein neuer Feed mit der Adresse zur oben erstellten PHP-Datei hinzugefügt. Zusätzlich wird mit dem URL-Parameter "a" das Konto angegeben, welches abgefragt werden soll. Also z.B. 0 für das erste, 1 für das zweite usw.
Eine solche URL sieht dann z.B. so aus:

http://www.msites.net/checker.php?a=1

Et voilà: Alle ungelesenen E-Mails werden im Feed-Reader im definierten Updateintervall angezeigt.

Final thoughts

Es ist sicher unschön dass das Passwort hart kodiert im Quelltext enthalten ist. Hier könnte man z.B. mit einer Datenbank im Hintergrund etwas sichereres bauen. Sicherlich wäre es auch möglich, den kompletten E-Mail-Text per RSS auszugeben. Aus Sicherheitsgründen habe ich bei dieser Implementierung darauf aber verzichtet.

Wer also die Adresse des Skripts nicht gerade in der Weltgeschichte verteilt, bekommt mit dem obigen Code ein einfaches Werkzeug zur E-Mail-Überprüfung in die Hand.



Es wurden noch keine Kommentare geschrieben.
Hinweis Ihre E-Mail-Adresse wird nicht veröffentlicht und ist nur dem Betreiber von msites.net ersichtlich. Das Feld für die Adresse Ihrer Internetseite sowie der Titel sind optional.






Bei Antworten per E-Mail benachrichtigen

Diesem Artikel sind keine Attachments angehängt.
Es wurden noch keine Trackbacks zu diesem Artikel gemeldet.