Ricerca…
Installa l'estensione IMAP
Per utilizzare le funzioni IMAP in PHP è necessario installare l'estensione IMAP:
Debian / Ubuntu con PHP5
sudo apt-get install php5-imap
sudo php5enmod imap
Debian / Ubuntu con PHP7
sudo apt-get install php7.0-imap
Distro basato su YUM
sudo yum install php-imap
Mac OS X con php5.6
brew reinstall php56 --with-imap
Connessione a una casella di posta
Per fare qualsiasi cosa con un account IMAP è necessario prima connettersi ad esso. Per fare questo è necessario specificare alcuni parametri obbligatori:
- Il nome del server o l'indirizzo IP del server di posta
- La porta a cui desideri connetterti
- IMAP è 143 o 993 (sicuro)
- POP è 110 o 995 (sicuro)
- SMTP è 25 o 465 (sicuro)
- NNTP è 119 o 563 (sicuro)
- Flag di connessione (vedi sotto)
Bandiera | Descrizione | Opzioni | Predefinito |
---|---|---|---|
/service=service | Quale servizio usare | imap, pop3, nntp, smtp | imap |
/user=user | nome utente remoto per l'accesso sul server | ||
/authuser=user | utente di autenticazione remota; se specificato, questo è il nome utente di cui viene utilizzata la password (ad es. amministratore) | ||
/anonymous | accesso remoto come utente anonimo | ||
/debug | registrare la telemetria del protocollo nel registro di debug dell'applicazione | Disabilitato | |
/secure | non trasmettere una password in chiaro sulla rete | ||
/norsh | non utilizzare rsh o ssh per stabilire una sessione IMAP preautenticata | ||
/ssl | utilizzare Secure Socket Layer per crittografare la sessione | ||
/validate-cert | certificati dal server TLS / SSL | abilitato | |
/novalidate-cert | non convalidare i certificati dal server TLS / SSL, necessario se il server utilizza certificati autofirmati. USARE CON CAUTELA | Disabilitato | |
/tls | forzare l'uso di start-TLS per crittografare la sessione e rifiutare la connessione ai server che non la supportano | ||
/notls | non fare start-TLS per crittografare la sessione, anche con i server che la supportano | ||
/readonly | richiede la casella di posta di sola lettura aperta (solo IMAP, ignorata su NNTP e un errore con SMTP e POP3) |
La tua stringa di connessione sarà simile a questa:
{imap.example.com:993/imap/tls/secure}
Si noti che se uno qualsiasi dei caratteri nella stringa di connessione non è ASCII, deve essere codificato con utf7_encode ($ stringa) .
Per connettersi alla casella di posta, utilizziamo il comando imap_open che restituisce un valore di risorsa che punta a uno stream:
<?php
$mailbox = imap_open("{imap.example.com:993/imap/tls/secure}", "username", "password");
if ($mailbox === false) {
echo "Failed to connect to server";
}
Elenca tutte le cartelle nella casella di posta
Dopo esserti connesso alla tua casella di posta, vorrai dare un'occhiata dentro. Il primo comando utile è imap_list . Il primo parametro è la risorsa che hai acquisito da imap_open
, la seconda è la stringa della tua casella di posta e la terza è una stringa di ricerca fuzzy ( *
è usata per abbinare qualsiasi modello).
$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);
}
L'output dovrebbe essere simile a questo
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
)
Puoi usare il terzo parametro per filtrare questi risultati in questo modo:
$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*.Sent");
E ora il risultato contiene solo voci con .Sent
nel nome:
Array
(
[0] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
)
Nota : l'uso di *
come ricerca fuzzy restituirà tutte le corrispondenze in modo ricorsivo. Se si utilizza %
, verranno restituite solo le corrispondenze nella cartella corrente specificata.
Ricerca di messaggi nella casella di posta
Puoi restituire un elenco di tutti i messaggi in una casella di posta usando imap_headers .
<?php
$headers = imap_headers($mailbox);
Il risultato è un array di stringhe con il seguente modello:
[FLAG] [MESSAGE-ID])[DD-MM-YYY] [FROM ADDRESS] [SUBJECT TRUNCATED TO 25 CHAR] ([SIZE] chars)
Ecco un esempio di come potrebbe apparire ogni riga:
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)
Simbolo | Bandiera | Senso |
---|---|---|
UN | risposto | Messaggio è stato risposto |
D | eliminata | Il messaggio è cancellato (ma non rimosso) |
F | Flagged | Il messaggio è contrassegnato / bloccato per l'attenzione |
N | Nuovo | Il messaggio è nuovo e non è stato visto |
R | Recente | Il messaggio è nuovo ed è stato visto |
U | Non letto | Il messaggio non è stato letto |
X | Bozza | Il messaggio è una bozza |
Nota che questa chiamata potrebbe richiedere una buona quantità di tempo per essere eseguita e potrebbe restituire un elenco molto ampio.
Un'alternativa è caricare singoli messaggi quando ne hai bisogno. imap_num_msg($mailbox)
tue e-mail viene assegnato un ID da 1 (il più vecchio) al valore di imap_num_msg($mailbox)
.
Ci sono un certo numero di funzioni per accedere direttamente a una email, ma il modo più semplice è usare imap_header
che restituisce le informazioni di intestazione strutturate:
<?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
)