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
)


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow