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 à |
ré | 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
)