Ich werde hier übrigens bewusst nur auf IMAP eingehen, da dies mehr Möglichkeiten bietet als POP3 und zudem mittlerweile auch von so ziemlich jedem eMail-Anbieter unterstützt wird.
Zunächst muss man dafür die Verbindung zu seiner Mailbox aufbauen:
$srv = '{imap.gmail.com:993/imap/ssl}INBOX'; $usr = 'blablubb@gmail.com'; $pw = 'deinpw'; $mailbox = imap_open($srv, $usr, $pw) or die('Cannot connect to Mailserver: ' . imap_last_error());
Ich verwende für dieses Beispiel einen GMail Account, da dies einer der am weitesten verbreiteten Anbieter ist, bei anderen Anbietern muss man natürlich neben dem Mailserver ggf auch noch den Port und den Usernamen (meist die eMail Adresse) anpassen, die genauen Daten dafür erfahrt ihr von eurem eMail Anbieter. Im Falle von GMail müsst ihr außerdem in eurem Konto in den Sicherheitseinstellungen den Zugriff durch „weniger sichere Apps“ zulassen.
Nun können wir die eMails abfragen, zunächst einmal holen wir uns die IDs aller eMails des heutigen Tages und anschließend die dazugehörigen Header sowie natürlich die Nachrichten selbst um sie dann zu formatieren und auszugeben:
// eMails von Heute abfragen, zu weiteren Abfragemöglichkeiten siehe unten $emails = imap_search($mailbox,'ON '. date('Y-m-d')); foreach ($emails as $m) { $header = imap_headerinfo($mailbox, $m); $message = imap_fetchbody($mailbox, $m, 2); $structure = imap_fetchstructure($mailbox, $m); // Damit die Nachricht korrekt dargestellt werden kann muss ermittelt werden wie diese kodiert ist $part = $structure->parts[1]; if($part->encoding == 3) { $message = imap_base64($message); } else if($part->encoding == 1) { $message = imap_8bit($message); } else { $message = imap_qprint($message); } echo 'Betreff: '. imap_utf8($header->subject) .'<br>'; echo 'Absender: '. $header->fromaddress .'<br>'; echo 'Nachricht: '. $message .'<hr>'; } // Verbindung beenden imap_expunge($mailbox); imap_close($mailbox);
Die Ausgabe habe ich in diesem Beispiel bewusst sehr einfach gehalten, das wird in der Regel ja sowieso jeder so gestalten wie er es bevorzugt.
Anstelle der eMails des aktuellen Tages gib es natürlich noch einige weitere Möglichkeiten die eMails mittels imap_search() zu filtern:
ALL - alle Nachrichten ANSWERED - beantwortete Nachrichten (mit dem \\ANSWERED flag versehen) BCC "string" - Nachrichten, die "string" im Bcc: Feld enthalten BEFORE "date" - Nachrichten vor "date" (Y-m-d) BODY "string" - Nachrichten, die "string" im Body CC "string" - Nachrichten, die "string" im Cc: Feld DELETED - gelöschte Nachrichten FLAGGED - mit dem \\FLAGGED Flag versehene Nachrichten (oft auch "Wichtig" oder "Dringend") FROM "string" - Nachrichten, die "string" im From: Feld KEYWORD "string" - Nachrichten, die "string" als Keyword haben NEW - neue Nachrichten OLD - alte Nachrichten ON "date" - Nachrichten vom Datum "date" (Y-m-d) RECENT - mit dem \\RECENT Flag versehene Nachrichten SEEN - gelesene Nachrichten (mit dem \\SEEN Flag versehen) SINCE "date" - Nachrichten nach dem "date" (Y-m-d) SUBJECT "string" - Nachrichten, die "string" im Subject: TEXT "string" - Nachrichten, die "string" im Text TO "string" - Nachrichten, die "string" im To: Feld UNANSWERED - unbeantwortete Nachrichten UNDELETED - ungelöschte Nachrichten UNFLAGGED - Nachrichten ohne Flag UNKEYWORD "string" - Nachrichten, die das Keyword "string" NICHT enthalten UNSEEN - ungelesene Nachrichten
Damit das alles funktioniert muss auf dem Server natürlich die IMAP Extension für PHP installiert und aktiviert sein, falls das nicht der Fall ist, könnt ihr das folgendermaßen ganz einfach nachholen indem ihr euch via SSH mit dem Server verbindet und folgendes eingebt:
sudo apt-get install php5-imap sudo php5enmod imap sudo service apache2 restart
(gilt für Debian-basierte Systeme, muss für andere Distributionen ggf angepasst werden)
Solltet ihr keinen SSH-Zugriff zu eurem Server haben, so wendet euch an euren Anbieter, damit dieser das ggf aktivieren kann.
Weitere Informationen zum Thema:
IMAP Funktionen im PHP Manual
(hier findet ihr auch weitere Optionen / Informationen, die ihr bei Bedarf abfragen könnt, ich habe hier nur die wichtigsten genannt)