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
)


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow