Recherche…


Installer l'extension IMAP

Pour utiliser les fonctions IMAP en PHP, vous devez installer l'extension IMAP:

Debian / Ubuntu avec PHP5

sudo apt-get install php5-imap
sudo php5enmod imap

Debian / Ubuntu avec PHP7

sudo apt-get install php7.0-imap

Distribution basée sur YUM

sudo yum install php-imap

Mac OS X avec php5.6

brew reinstall php56 --with-imap

Connexion à une boîte aux lettres

Pour faire quelque chose avec un compte IMAP, vous devez d'abord vous y connecter. Pour ce faire, vous devez spécifier certains paramètres requis:

  • Le nom du serveur ou l'adresse IP du serveur de messagerie
  • Le port sur lequel vous souhaitez vous connecter
    • IMAP est 143 ou 993 (sécurisé)
    • POP est 110 ou 995 (sécurisé)
    • SMTP est 25 ou 465 (sécurisé)
    • NNTP est 119 ou 563 (sécurisé)
  • Drapeaux de connexion (voir ci-dessous)
Drapeau La description Les options Défaut
/service=service Quel service utiliser imap, pop3, nntp, smtp imap
/user=user nom d'utilisateur distant pour la connexion sur le serveur
/authuser=user utilisateur d'authentification à distance; si spécifié, c'est le nom d'utilisateur dont le mot de passe est utilisé (par exemple, administrateur)
/anonymous accès à distance en tant qu'utilisateur anonyme
/debug enregistrement de protocole de télémétrie dans le journal de débogage de l'application désactivée
/secure ne pas transmettre un mot de passe en clair sur le réseau
/norsh n'utilisez pas rsh ou ssh pour établir une session IMAP pré-authentifiée
/ssl utiliser le Secure Socket Layer pour chiffrer la session
/validate-cert certificats du serveur TLS / SSL activée
/novalidate-cert Ne validez pas les certificats du serveur TLS / SSL, nécessaires si le serveur utilise des certificats auto-signés. UTILISER AVEC PRÉCAUTION désactivée
/tls forcer l'utilisation de start-TLS pour chiffrer la session et rejeter la connexion aux serveurs qui ne la prennent pas en charge
/notls ne faites pas démarrer TLS pour crypter la session, même avec les serveurs qui la prennent en charge
/readonly demande de boîte aux lettres en lecture seule ouverte (IMAP uniquement; ignorée sur NNTP et erreur avec SMTP et POP3)

Votre chaîne de connexion ressemblera à ceci:

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

Veuillez noter que si l'un des caractères de votre chaîne de connexion est non-ASCII, il doit être codé avec utf7_encode ($ string) .

Pour vous connecter à la boîte aux lettres, nous utilisons la commande imap_open qui renvoie une valeur de ressource pointant vers un flux:

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

Liste tous les dossiers de la boîte aux lettres

Une fois connecté à votre boîte aux lettres, vous voudrez jeter un coup d’œil à l’intérieur. La première commande utile est imap_list . Le premier paramètre est la ressource que vous avez acquise à partir de imap_open , la seconde est votre chaîne de boîte aux lettres et la troisième est une chaîne de recherche floue ( * est utilisé pour correspondre à n'importe quel modèle).

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

La sortie devrait ressembler à ceci

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
)

Vous pouvez utiliser le troisième paramètre pour filtrer ces résultats comme suit:

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

Et maintenant, le résultat ne contient que des entrées avec .Sent dans le nom:

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

Remarque : L'utilisation de * comme recherche floue renverra toutes les correspondances de manière récursive. Si vous utilisez % il ne renverra que les correspondances dans le dossier actuel spécifié.

Recherche de messages dans la boîte aux lettres

Vous pouvez retourner une liste de tous les messages dans une boîte aux lettres en utilisant imap_headers .

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

Le résultat est un tableau de chaînes avec le modèle suivant:

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

Voici un exemple de ce à quoi chaque ligne pourrait ressembler:

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)
symbole Drapeau Sens
UNE Répondu Message a été répondu à
Supprimé Le message est supprimé (mais pas supprimé)
F Marqué Le message est signalé / surveillé
N Nouveau Le message est nouveau et n'a pas été vu
R Récent Le message est nouveau et a été vu
U Non lu Le message n'a pas été lu
X Brouillon Le message est un brouillon

Notez que cet appel peut prendre un certain temps pour s'exécuter et renvoyer une très grande liste.

Une alternative consiste à charger des messages individuels selon vos besoins. Vos e-mails reçoivent chacun un identifiant de 1 (le plus ancien) à la valeur de imap_num_msg($mailbox) .

Il y a un certain nombre de fonctions pour accéder directement à un courrier électronique, mais le plus simple est d'utiliser imap_header qui renvoie des informations d'en-tête structurées:

<?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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow