Zoeken…


IMAP-extensie installeren

Om de IMAP-functies in PHP te gebruiken, moet u de IMAP-extensie installeren:

Debian / Ubuntu met PHP5

sudo apt-get install php5-imap
sudo php5enmod imap

Debian / Ubuntu met PHP7

sudo apt-get install php7.0-imap

YUM gebaseerde distro

sudo yum install php-imap

Mac OS X met php5.6

brew reinstall php56 --with-imap

Verbinding maken met een mailbox

Als u iets wilt doen met een IMAP-account, moet u er eerst verbinding mee maken. Om dit te doen, moet u enkele vereiste parameters opgeven:

  • De servernaam of het IP-adres van de mailserver
  • De poort waarop u verbinding wilt maken
    • IMAP is 143 of 993 (veilig)
    • POP is 110 of 995 (beveiligd)
    • SMTP is 25 of 465 (beveiligd)
    • NNTP is 119 of 563 (beveiligd)
  • Verbindingsvlaggen (zie hieronder)
Vlag Beschrijving opties Standaard
/service=service Welke service te gebruiken imap, pop3, nntp, smtp imap
/user=user externe gebruikersnaam voor inloggen op de server
/authuser=user externe authenticatie gebruiker; indien gespecificeerd is dit de gebruikersnaam waarvan het wachtwoord wordt gebruikt (bijv. beheerder)
/anonymous externe toegang als anonieme gebruiker
/debug protocolprememetrie opnemen in het foutopsporingslogboek van de toepassing gehandicapt
/secure verstuur geen wachtwoord met platte tekst via het netwerk
/norsh gebruik geen rsh of ssh om een vooraf geverifieerde IMAP-sessie tot stand te brengen
/ssl gebruik de Secure Socket Layer om de sessie te coderen
/validate-cert certificaten van TLS / SSL-server ingeschakeld
/novalidate-cert valideer geen certificaten van de TLS / SSL-server, nodig als de server zelfondertekende certificaten gebruikt. VOORZICHTIG GEBRUIKEN gehandicapt
/tls forceer het gebruik van start-TLS om de sessie te versleutelen en weiger de verbinding met servers die deze niet ondersteunen
/notls start start-TLS niet om de sessie te versleutelen, zelfs niet met servers die deze ondersteunen
/readonly verzoek alleen-lezen mailbox geopend (alleen IMAP; genegeerd op NNTP en een fout met SMTP en POP3)

Uw verbindingsreeks ziet er ongeveer zo uit:

{imap.example.com:993/imap/tls/secure}

Let op: als een van de tekens in uw verbindingsreeks niet-ASCII is, moet deze worden gecodeerd met utf7_encode ($ string) .

Om verbinding te maken met de mailbox, gebruiken we de opdracht imap_open die een bronwaarde retourneert die naar een stream verwijst :

<?php
$mailbox = imap_open("{imap.example.com:993/imap/tls/secure}", "username", "password");
if ($mailbox === false) {
    echo "Failed to connect to server";
}

Lijst met alle mappen in de mailbox

Nadat u verbinding heeft gemaakt met uw mailbox, wilt u een kijkje nemen binnen. De eerste nuttige opdracht is imap_list . De eerste parameter is de bron die u hebt verkregen van imap_open , de tweede is uw mailbox-string en de derde is een fuzzy- imap_open ( * wordt gebruikt om aan elk patroon te voldoen).

$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);
}

De uitvoer moet er ongeveer zo uitzien

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
)

U kunt de derde parameter gebruiken om deze resultaten als volgt te filteren:

$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*.Sent");

En nu bevat het resultaat alleen vermeldingen met .Sent in de naam:

Array
(
    [0] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
)

Opmerking : als u * als een fuzzy-zoekopdracht, worden alle overeenkomsten recursief geretourneerd. Als u % , worden alleen overeenkomsten in de opgegeven map geretourneerd.

Berichten zoeken in de mailbox

U kunt een lijst met alle berichten in een mailbox retourneren met behulp van imap_headers .

<?php
$headers = imap_headers($mailbox);

Het resultaat is een reeks strings met het volgende patroon:

[FLAG] [MESSAGE-ID])[DD-MM-YYY] [FROM ADDRESS] [SUBJECT TRUNCATED TO 25 CHAR] ([SIZE] chars)

Hier is een voorbeeld van hoe elke regel eruit zou kunnen zien:

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)
Symbool Vlag Betekenis
EEN beantwoord Bericht is beantwoord
D Verwijderde Bericht is verwijderd (maar niet verwijderd)
F Flagged Bericht is gemarkeerd / gemarkeerd voor aandacht
N Nieuw Bericht is nieuw en niet gezien
R recent Bericht is nieuw en is gezien
U Ongelezen Bericht is niet gelezen
X Droogte Bericht is een concept

Houd er rekening mee dat dit een behoorlijke tijd kan duren om te worden uitgevoerd en een zeer grote lijst kan opleveren.

Een alternatief is om afzonderlijke berichten te laden wanneer u ze nodig hebt. Aan uw e-mails wordt elk een ID toegewezen van 1 (de oudste) tot de waarde imap_num_msg($mailbox) .

Er zijn een aantal functies om rechtstreeks toegang tot een e-mail te krijgen, maar de eenvoudigste manier is om imap_header te gebruiken die gestructureerde koptekstinformatie retourneert:

<?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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow