Sök…
Installera IMAP-förlängningen
För att använda IMAP-funktionerna i PHP måste du installera IMAP-förlängningen:
Debian / Ubuntu med PHP5
sudo apt-get install php5-imap
sudo php5enmod imap
Debian / Ubuntu med PHP7
sudo apt-get install php7.0-imap
YUM-baserad distro
sudo yum install php-imap
Mac OS X med php5.6
brew reinstall php56 --with-imap
Ansluter till en brevlåda
För att göra något med ett IMAP-konto måste du ansluta till det först. För att göra detta måste du ange några parametrar som krävs:
- Servernamnet eller IP-adressen för e-postservern
- Porten du vill ansluta till
- IMAP är 143 eller 993 (säker)
- POP är 110 eller 995 (säker)
- SMTP är 25 eller 465 (säker)
- NNTP är 119 eller 563 (säkert)
- Anslutningsflaggor (se nedan)
Flagga | Beskrivning | alternativ | Standard |
---|---|---|---|
/service=service | Vilken tjänst att använda | imap, pop3, nntp, smtp | imap |
/user=user | fjärranvändarnamn för inloggning på servern | ||
/authuser=user | användare för fjärrverifiering; om det anges är detta användarnamnet vars lösenord används (t.ex. administratör) | ||
/anonymous | fjärråtkomst som anonym användare | ||
/debug | spela in protokoll telemetri i applikationens felsökningslogg | Inaktiverad | |
/secure | skicka inte ett vanligt lösenord över nätverket | ||
/norsh | använd inte rsh eller ssh för att skapa en förutbestämd IMAP-session | ||
/ssl | använd Secure Socket Layer för att kryptera sessionen | ||
/validate-cert | certifikat från TLS / SSL-server | aktiverad | |
/novalidate-cert | validerar inte certifikat från TLS / SSL-server, behövs om servern använder självsignerade certifikat. ANVÄND MED FÖRSIKTIGHET | Inaktiverad | |
/tls | tvinga användning av start-TLS för att kryptera sessionen och avvisa anslutning till servrar som inte stöder den | ||
/notls | inte start-TLS för att kryptera sessionen, inte ens med servrar som stöder den | ||
/readonly | begär skrivskyddad brevlåda öppen (endast IMAP; ignoreras på NNTP och ett fel med SMTP och POP3) |
Din anslutningssträng ser ut så här:
{imap.example.com:993/imap/tls/secure}
Observera att om något av tecknen i din anslutningssträng inte är ASCII måste det kodas med utf7_encode ($ string) .
För att ansluta till brevlådan använder vi kommandot imap_open som returnerar ett resursvärde som pekar på en ström:
<?php
$mailbox = imap_open("{imap.example.com:993/imap/tls/secure}", "username", "password");
if ($mailbox === false) {
echo "Failed to connect to server";
}
Lista alla mappar i brevlådan
När du har anslutit dig till din brevlåda vill du titta inifrån. Det första användbara kommandot är imap_list . Den första parametern är resursen du skaffade dig från imap_open
, den andra är din postlådesträng och den tredje är en fuzzy söksträng ( *
används för att matcha vilket mönster som helst).
$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);
}
Utgången ska se ut som den här
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
)
Du kan använda den tredje parametern för att filtrera dessa resultat så här:
$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*.Sent");
Och nu innehåller resultatet bara poster med .Sent
i namnet:
Array
(
[0] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
)
Obs! Om du använder *
som en otydlig sökning returneras alla matcher rekursivt. Om du använder %
returnerar det bara matchningar i den aktuella mappen som anges.
Hitta meddelanden i brevlådan
Du kan returnera en lista över alla meddelanden i en brevlåda med imap_headers .
<?php
$headers = imap_headers($mailbox);
Resultatet är en rad strängar med följande mönster:
[FLAG] [MESSAGE-ID])[DD-MM-YYY] [FROM ADDRESS] [SUBJECT TRUNCATED TO 25 CHAR] ([SIZE] chars)
Här är ett exempel på hur varje rad kan se ut:
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 | Flagga | Menande |
---|---|---|
EN | svarade | Meddelandet har besvarats |
D | raderade | Meddelandet raderas (men tas inte bort) |
F | flaggad | Meddelandet markeras / stirras för uppmärksamhet |
N | Ny | Meddelandet är nytt och har inte setts |
R | Nyligen | Meddelandet är nytt och har sett |
U | Oläst | Meddelandet har inte lästs |
X | Förslag | Meddelandet är ett utkast |
Observera att det här samtalet kan ta en god tid att köra och kan ge en mycket stor lista.
Ett alternativ är att ladda enskilda meddelanden som du behöver dem. Dina e-postmeddelanden tilldelas var och en ett ID från 1 (den äldsta) till värdet imap_num_msg($mailbox)
.
Det finns ett antal funktioner för att komma direkt till ett e-postmeddelande, men det enklaste sättet är att använda imap_header
som returnerar strukturerad rubrikinformation:
<?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
)