Suche…
Installieren Sie die IMAP-Erweiterung
Um die IMAP-Funktionen in PHP verwenden zu können, müssen Sie die IMAP-Erweiterung installieren:
Debian / Ubuntu mit PHP5
sudo apt-get install php5-imap
sudo php5enmod imap
Debian / Ubuntu mit PHP7
sudo apt-get install php7.0-imap
YUM basierte Distribution
sudo yum install php-imap
Mac OS X mit PHP5.6
brew reinstall php56 --with-imap
Verbindung zu einer Mailbox herstellen
Um irgendetwas mit einem IMAP-Konto zu tun, müssen Sie zuerst eine Verbindung dazu herstellen. Dazu müssen Sie einige erforderliche Parameter angeben:
- Der Servername oder die IP-Adresse des Mailservers
- Der Port, an dem Sie eine Verbindung herstellen möchten
- IMAP ist 143 oder 993 (sicher)
- POP ist 110 oder 995 (sicher)
- SMTP ist 25 oder 465 (sicher)
- NNTP ist 119 oder 563 (sicher)
- Verbindungsflags (siehe unten)
Flagge | Beschreibung | Optionen | Standard |
---|---|---|---|
/service=service | Welchen Dienst verwenden? | imap, pop3, nntp, smtp | Imap |
/user=user | Remote-Benutzername für die Anmeldung am Server | ||
/authuser=user | Remote-Authentifizierungsbenutzer; falls angegeben, ist dies der Benutzername, dessen Passwort verwendet wird (zB Administrator) | ||
/anonymous | Fernzugriff als anonymer Benutzer | ||
/debug | Protokollieren Sie die Telemetrie im Debug-Protokoll der Anwendung | deaktiviert | |
/secure | Übertragen Sie kein Klartext-Passwort über das Netzwerk | ||
/norsh | Verwenden Sie nicht rsh oder ssh, um eine vorauthentifizierte IMAP-Sitzung einzurichten | ||
/ssl | Verwenden Sie Secure Socket Layer, um die Sitzung zu verschlüsseln | ||
/validate-cert | Zertifikate vom TLS / SSL-Server | aktiviert | |
/novalidate-cert | Überprüfen Sie keine Zertifikate vom TLS / SSL-Server. Dies ist erforderlich, wenn der Server selbstsignierte Zertifikate verwendet. VERWENDUNG MIT VORSICHT | deaktiviert | |
/tls | Erzwinge die Verwendung von start-TLS, um die Sitzung zu verschlüsseln, und lehne die Verbindung zu Servern ab, die sie nicht unterstützen | ||
/notls | Verwenden Sie nicht start-TLS, um die Sitzung zu verschlüsseln, auch wenn die Server dies unterstützen | ||
/readonly | schreibgeschütztes Postfach anfordern (nur IMAP; bei NNTP ignoriert und bei SMTP und POP3 ein Fehler) |
Ihre Verbindungszeichenfolge sieht ungefähr so aus:
{imap.example.com:993/imap/tls/secure}
Wenn eines der Zeichen in Ihrer Verbindungszeichenfolge Nicht-ASCII-Zeichen ist, muss es mit utf7_encode ($ string) codiert werden.
Um eine Verbindung zum Postfach herzustellen , verwenden wir den Befehl imap_open, der einen Ressourcenwert zurückgibt, der auf einen Stream zeigt:
<?php
$mailbox = imap_open("{imap.example.com:993/imap/tls/secure}", "username", "password");
if ($mailbox === false) {
echo "Failed to connect to server";
}
Alle Ordner in der Mailbox auflisten
Sobald Sie sich mit Ihrer Mailbox verbunden haben, möchten Sie einen Blick darauf werfen. Der erste nützliche Befehl ist imap_list . Der erste Parameter ist die Ressource, die Sie von imap_open
erworben imap_open
, der zweite ist Ihre Mailbox-Zeichenfolge und der dritte ist eine unscharfe imap_open
( *
wird verwendet, um ein Muster zu finden).
$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*");
if ($folders === false) {
echo "Failed to list folders in mailbox";
} else {
print_r($folders);
}
Die Ausgabe sollte ähnlich aussehen
Array
(
[0] => {imap.example.com:993/imap/tls/secure}INBOX
[1] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
[2] => {imap.example.com:993/imap/tls/secure}INBOX.Drafts
[3] => {imap.example.com:993/imap/tls/secure}INBOX.Junk
[4] => {imap.example.com:993/imap/tls/secure}INBOX.Trash
)
Mit dem dritten Parameter können Sie diese Ergebnisse folgendermaßen filtern:
$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*.Sent");
Und jetzt enthält das Ergebnis nur Einträge mit .Sent
im Namen:
Array
(
[0] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
)
Hinweis : Wenn Sie *
als Fuzzy-Suche verwenden, werden alle Übereinstimmungen rekursiv zurückgegeben. Wenn Sie %
, werden nur Übereinstimmungen im aktuellen Ordner zurückgegeben.
Nachrichten im Postfach suchen
Sie können eine Liste aller Nachrichten in einem Postfach mit imap_headers zurückgeben .
<?php
$headers = imap_headers($mailbox);
Das Ergebnis ist ein Array von Strings mit dem folgenden Muster:
[FLAG] [MESSAGE-ID])[DD-MM-YYY] [FROM ADDRESS] [SUBJECT TRUNCATED TO 25 CHAR] ([SIZE] chars)
Hier ist ein Beispiel, wie jede Zeile aussehen könnte:
A 1)19-Aug-2016 [email protected] Message Subject (1728 chars)
D 2)19-Aug-2016 [email protected] RE: Message Subject (22840 chars)
U 3)19-Aug-2016 [email protected] RE: RE: Message Subject (1876 chars)
N 4)19-Aug-2016 [email protected] RE: RE: RE: Message Subje (1741 chars)
Symbol | Flagge | Bedeutung |
---|---|---|
EIN | Antwortete | Auf die Nachricht wurde geantwortet |
D | Gelöscht | Nachricht wird gelöscht (aber nicht entfernt) |
F | Gekennzeichnet | Die Nachricht wird zur Beachtung markiert |
N | Neu | Nachricht ist neu und wurde noch nicht gesehen |
R | Kürzlich | Nachricht ist neu und wurde gesehen |
U | Ungelesen | Nachricht wurde nicht gelesen |
X | Entwurf | Nachricht ist ein Entwurf |
Beachten Sie, dass dieser Aufruf eine längere Zeit in Anspruch nehmen kann und eine sehr große Liste zurückgibt.
Alternativ können Sie einzelne Nachrichten nach Bedarf laden. Ihren E-Mails wird jeweils eine ID von 1 (die älteste) für den Wert von imap_num_msg($mailbox)
.
Es gibt eine Reihe von Funktionen, um direkt auf eine E-Mail zuzugreifen. Die einfachste Methode ist die Verwendung von imap_header
die strukturierte Headerinformationen zurückgibt:
<?php
$header = imap_headerinfo($mailbox , 1);
stdClass Object
(
[date] => Wed, 19 Oct 2011 17:34:52 +0000
[subject] => Message Subject
[message_id] => <04b80ceedac8e74$51a8d50dd$0206600a@user1687763490>
[references] => <[email protected]>
[toaddress] => Some One Else <[email protected]>
[to] => Array
(
[0] => stdClass Object
(
[personal] => Some One Else
[mailbox] => someonelse
[host] => example.com
)
)
[fromaddress] => Some One <[email protected]>
[from] => Array
(
[0] => stdClass Object
(
[personal] => Some One
[mailbox] => someone
[host] => example.com
)
)
[reply_toaddress] => Some One <[email protected]>
[reply_to] => Array
(
[0] => stdClass Object
(
[personal] => Some One
[mailbox] => someone
[host] => example.com
)
)
[senderaddress] => Some One <[email protected]>
[sender] => Array
(
[0] => stdClass Object
(
[personal] => Some One
[mailbox] => someone
[host] => example.com
)
)
[Recent] =>
[Unseen] =>
[Flagged] =>
[Answered] =>
[Deleted] =>
[Draft] =>
[Msgno] => 1
[MailDate] => 19-Oct-2011 17:34:48 +0000
[Size] => 1728
[udate] => 1319038488
)