Emails aus Mailbox über PHP auslesen
Mit PHP kann man sehr einfach Emails senden wie ich in einem meiner Artikel bereits gezeigt habe. PHP bietet zudem auch zahlreiche Möglichkeiten Mails aus einer Mailbox automatisch auszulesen. So könnte man ein automatisches System erstellen, welches Mails lesen kann und anhand des Inhalts verschiedene Aktionen ausführen kann.
Emails aus Mailbox über PHP auslesen
Man kann über PHP eine IMAP oder POP Mailbox sehr einfach auslesen. Ich habe das zuletzt in einem Projekt verwendet.
Imap
Das Internet Message Access Protocol bietet im Gegensatz zu anderen Protokollen wie POP3 mehr Möglichkeiten an mit der Mailbox und den Mails zu interagieren. Aus diesem Grund verwende ich hier in dem Beispiel IMAP.
Verbindung zur Mailbox aufbauen
Im folgenden Code zeige ich wie man sich mit einer Mailbox verbindet:
$server='{mail.domain.at:143}INBOX'; $adresse='vorname.nachname@domain.at'; $password='supergeheim'; $mbox = imap_open($server, $adresse, $password, OP_READONLY);
Für die Verbindung benötigen wir die imap_open Funktion. Dieser Funktion übergeben wir alle erforderlichen Daten. Das sind:
- Server
der erste Parameter ist der Server auf dem das IMAP Postfach läuft. Man gibt hier den Server und auch den Port an. Für IMAP ist das 143. Eventuell kann hier ein andere Port verwendet werden. Bei SSL geschützten Verbindungen benötigt man den Port 993. - Benutzername/Loginname
als nächstes ist der Benutzername bzw. der Kontoname anzugeben. Das sollte üblicherweise die Mailadresse sein von der man die Mails abrufen möchte. - Passwort
das ist das Passwort der Mailbox. - optionale Parameter
es gibt einige optionale Parameter die man angeben kann. In diesem Beispiel wollen wir die Mails nur lesen und die Daten der Mailbox nicht verändern.
Als Ergebnis erhält man von der Funktion einen IMAP stream der Mailbox oder im Fehlerfall false.
Header und Body auslesen
Mit dem IMAP stream können wir nun mit den Funktionen imap_headers und imap_fetchbody sowohl Headerinformationen der Mails als auch deren Inhalt auslesen. Das funktioniert für normale Text Emais als auch für HTML Mails.
$no=1; $headers = imap_headers($mbox); $text = imap_fetchbody($mbox, $no, 1); for($i = 0; $i < count($headers); ++$i) { echo "Header: ".$headers[$i]."<br>"; echo "Body: ".imap_fetchbody($mbox, $i+1, 1)."<br>"; echo "<hr/>"; }
Fazit
Es ist sehr einfach aus einer Mailbox die Emails mit Header und Body auszulesen und in einem Skript darzustellen. Über PHP kann man Mails und deren Attachements auslesen und verarbeiten. Die Mails können in der Mailbox verschoben oder gelöscht werden. Eine perfekte Möglichkeit um den Mailspeicher bei Gmail für das eigene Projekt zu nutzen.
danke für den Code. Bei mir führt er aber zu einer Fehlermeldung in der Ausgabe ganz oben:
Warning: imap_fetchbody() [function.imap-fetchbody]: Bad message number in /homepages……… on line („$text = imap_fetchbody($mbox, $no, 1)“);
ein zuvor eingefügtes:
$no=1;
behebt das…
du hast natürlich recht! Ich verwende hier eine Variable die nicht initialisiert wurde. Da hab ich etwas nicht mit kopiert. Danke für den Tipp!
Der Code funktioniert einwandfrei für Port 143 (IMAP). Setzt man Port 110 (pop3) oder 993 (SSL) ein, dann ergibt sich eine Endlosschleife.
Außerdem werden grundsätzlich alle Mails aus der Inbox gelesen. Dieser Code erkennt also nicht, ob gelesen oder nicht.