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
)