version 2003 (Modifiée)
L'ensemble de commandes IMAP4 permet à vos bases de données d'accéder à des messages électroniques stockés sur un serveur de messagerie IMAP, de les traiter et de les récupérer. Les commandes IMAP sont conformes au protocole Internet Message Access Protocol, Version 4 révision 1 (IMAP4 rev1), défini par la rfc 2060. IMAP4 rev1 permet de gérer des dossiers de messages à distance, appelés "boîtes aux lettres", de la même manière que les boîtes aux lettres locales.
Les commandes IMAP permettent d'effectuer des opérations telles que la création, la suppression ou le changement de nom de boîtes aux lettres, la vérification de la présence de nouveaux messages, la suppression définitive de messages, la pose et la suppression de marqueurs (flags), la recherche de messages ou encore la récupération de parties de messages.
Terminologie
Connexion : une "Connexion" désigne la totalité de la séquence d'interactions client/serveur IMAP, depuis la première connexion réseau (IMAP_Login) jusqu'à la fin de la connexion (IMAP_Logout).
Session : une "Session" désigne la séquence d'interactions client/serveur IMAP à compter de la sélection d'une boîte aux lettres (IMAP_SetCurrentMB) jusqu'à la fin de cette sélection (IMAP_SetCurrentMB, IMAP_CloseCurrentMB) ou jusqu'à la fin de la connexion (IMAP_Logout).
Présentation des connexions IMAP
Initialisation de la communication TCP : IT_MacTCPInit (dans le cas d'une connexion PPP, la commande IT_PPPConnect doit être exécutée au préalable).
Ouverture d'une connexion : IMAP_Login.
Gestion des boîtes aux lettres : liste, création, suppression, changement de nom, abonnement/désabonnement, statut des paramètres.
Ouverture d'une session via la définition de la boîte aux lettres courante : IMAP_SetCurrentMB.
Une fois que la boîte aux lettres courante est définie, vous pouvez gérer les messages qu'elle contient.
Gestion des messages : liste, téléchargement ou suppression des messages ; liste des marqueurs de messages ; modification des marqueurs de messages ; copie vers une autre boîte aux lettres ; recherches et récupération de parties de messages sans téléchargement, etc.
Une fois que vous avez fini de travailler avec les messages de la boîte aux lettres courante, vous pouvez fermer la session ou en ouvrir une autre en définissant une nouvelle boîte aux lettres courante. Dans tous les cas, le serveur IMAP mettra en permanence ses messages à jour. Par exemple, il supprimera tous les messages comportant le marqueur \Deleted.
Lorsque vous avez terminé, vous devez vous déconnecter. Fermeture d'une connexion : IMAP_Logout.
Autres opérations : définition des Préférences, capacité, vérification de la connexion et remise à zéro des compteurs d'inactivité avant déconnexion automatique sur le serveur IMAP.
Thèmes de commandes IMAP
Les commandes de traitement des messages sont réparties en deux thèmes : IC IMAP Review Mail (échanges avec le serveur IMAP) et IC Downloaded Mail (traitement en local), correspondant aux deux modes de lecture des messages électroniques. Lorsque vous lisez un message électronique depuis un serveur IMAP, les messages (ou les informations des messages) peuvent être importés dans des objets 4D (variables, champs, tableaux) ou téléchargés sur disque. Cette section décrit les possibilités offertes par les Commandes Internet de 4D concernant la lecture des messages depuis un serveur IMAP.
La taille des fichiers à télécharger va déterminer l'utilisation d'un mode par rapport à l'autre. Par exemple, un seul message électronique auquel est joint un fichier de 5 Mo pourrait facilement dépasser la capacité de stockage de la base de données. Seul un BLOB ou une image 4D est capable d'accueillir des données de cette taille, mais la conversion d'un message ou d'un document joint dans ce format est souvent inefficace car la messagerie cliente doit mobiliser de grandes ressources mémoire pour accéder à l'image ou au BLOB. Pour résoudre ce problème, la commande IMAP_Download transfère un message du serveur IMAP directement sur le disque local de l'utilisateur. Il suffit ensuite d'utiliser les commandes du thème IC Downloaded Mail pour manipuler le fichier sur disque.
Mécanismes des boîtes aux lettres
Une boîte aux lettres IMAP peut être considérée comme un dossier ; celui-ci peut contenir des fichiers et des sous-dossiers. De même, une boîte aux lettres peut contenir des messages et des sous-boîtes aux lettres.
L'accès à une boîte aux lettres s'effectue via son chemin d'accès hiérarchique complet. Les niveaux hiérarchiques sont désignés à l'aide d'un caractère séparateur, dépendant du serveur IMAP (la commande IMAP_ListMBs retourne le séparateur).
Vous pouvez utiliser le séparateur pour créer des boîtes aux lettres "filles" ou pour descendre ou remonter à l'intérieur de la hiérarchie. Tous les "enfants" d'un élément principal utilisent le même caractère séparateur.
Note : Vous ne pouvez gérer des messages qu'à partir du moment où une boîte aux lettres est définie comme boîte aux lettres courante (lorsqu'une session est ouverte) à l'aide de la commande IMAP_SetCurrentMB.
Chaque compte peut disposer d'une ou plusieurs boîtes aux lettres.
Les noms de boîtes aux lettres tiennent compte de la casse des caractères ; par conséquent, vous ne pouvez pas créer deux boîtes aux lettres dont seule la casse du nom diffère.
La boîte aux lettres INBOX est un cas particulier : elle existe dans chaque compte et est utilisée pour stocker les messages reçus. La boîte aux lettres INBOX est automatiquement créée à l'ouverture d'un compte. Un utilisateur ne peut pas supprimer la boîte aux lettres INBOX mais il peut la renommer. Dans ce cas, une nouvelle boîte aux lettres INBOX vide est immédiatement créée. Le nom INBOX ne tient pas compte de la casse.
Certaines informations, telles que le nombre total de messages ou de nouveaux messages, peuvent être obtenues même si la boîte aux lettres interrogée n'est pas la boîte aux lettres courante.
numéroMsg et uniqueID
L'utilisation des commandes IMAP nécessite une bonne compréhension des paramètres numéroMsg et uniqueID.
numéroMsg représente le numéro d'un message dans la boîte aux lettres au moment de l'exécution de la commande IMAP_SetCurrentMB.
Une fois qu'une boîte aux lettres courante est sélectionnée, les messages qu'elle contient sont numérotés de 1 à x (x étant le nombre d'éléments présents dans la boîte aux lettres). Les numéros sont affectés en fonction de l'ordre dans lequel les messages ont été reçus, le numéro 1 étant le plus ancien. Les numéros affectés aux messages ne sont valides qu'entre le moment où une boîte aux lettres courante a été sélectionnée (IMAP_SetCurrentMB) et sa fermeture (IMAP_CloseCurrentMB, IMAP_SetCurrentMB ou IMAP_Logout).
Au moment de la fermeture de la boîte aux lettres courante, tout message marqué comme "devant être supprimé" est effacé. Lorsque l'utilisateur se reconnecte au serveur IMAP, les messages présents dans la boîte aux lettres sont de nouveau numérotés de 1 à x. Par exemple, s'il y a 10 messages dans la boîte aux lettres et si les messages numérotés de 1 à 5 sont supprimés, les messages 6 à 10 seront renumérotés de 1 à 5 la prochaine fois que l'utilisateur consultera sa boîte aux lettres.
Pour illustrer ce fonctionnement, supposons que vous vous connectiez à un serveur IMAP et obteniez la liste de messages suivante :
numéroMsg | uniqueID | Date | De | Objet |
1 | 10005 | 1 Jul 2001... | danw@acme.com | Clients potentiels... |
2 | 10008 | 1 Jul 2001... | frank@acme.com | Commande de licence sur site |
3 | 10012 | 3 Jul 2001... | joe@acme.com | Qui veut déjeuner ? |
4 | 20000 | 4 Jul 2002... | kelly@acme.com | Appel de votre femme... |
5 | 20001 | 4 Jul 2002... | track@fedex.com | Suivi FedEx |
Pendant la session, vous supprimez les messages 3 et 4. Lorsque vous quittez la session, vos demandes de suppression sont exécutées. Lorsque vous retournez sur le serveur, la liste de messages est alors renumérotée ainsi :
numéroMsg | uniqueID | Date | De | Objet |
1 | 10005 | 1 Jul 2001 ... | danw@acme.com | Clients potentiels... |
2 | 10008 | 1 Jul 2001 ... | frank@acme.com | Commande de licence sur site |
3 | 20001 | 4 Jul 2002 ... | track@fedex.com | Suivi FedEx |
numéroMsg n'est pas une valeur statique se rapportant à un message spécifique, elle indique la position relative d'un message de la boîte aux lettres au moment de la sélection d'une boîte aux lettres courante.
En revanche, uniqueID est un numéro unique affecté au message lors de sa réception par le serveur IMAP, dans un ordre strictement croissant. Chaque nouveau message reçoit un numéro uniqueID supérieur à ceux présents dans la boîte aux lettres.
Malheureusement, les serveurs IMAP n'utilisent pas uniqueID comme référence principale des messages. Aussi, lorsque vous manipulez des messages avec les commandes IMAP, vous devez passer numéroMsg comme paramètre d'identification des messages sur le serveur. Par conséquent, vous devez être prudent lorsque vous développez des applications qui référencent des messages dans la base de données tout en laissant le contenu du message sur le serveur.
Recommandations
Comme la caractéristique principale d'IMAP est l'interopérabilité et que celle-ci ne peut être contrôlée qu'en situation réelle, la recommandation principale est "Testez TOUT". Il est conseillé de tester vos postes clients avec tous les serveurs sur lesquels ils ont un compte.
Pour plus d'informations, vous pouvez consulter les sites suivants :
IMAP Products and Services: http://www.imap.org/products.html
MailConnect: http://www.imc.org/imc-mailconnect
Comparaison des commandes POP3 et IMAP4
Login | Equivalent | Pas de paramètre POP pour IMAP |
VerifyID | Equivalent | |
Delete | Equivalent | Les commandes IMAP suppriment en temps réel. |
Les commandes POP3 requièrent POP3_Logout | ||
pour supprimer les messages. IMAP_SetFlags | ||
positionnant le marqueur \Deleted permet | ||
d'obtenir le même résultat que POP3_Delete | ||
Logout | Equivalent | |
SetPrefs | Equivalent | Pas de dossierDocsJoints pour IMAP, le paramètre |
POP3 dossierDocsJoints est devenu optionnel | ||
GetPrefs | Equivalent | Voir note dossierDocsJoints précédente |
MsgLstInfo | Equivalent | |
MsgInfo | Equivalent | |
MsgLst | Equivalent | |
UIDToMsgNum | Equivalent | uniqueID est un Entier long pour IMAP et un Alpha |
pour POP3 | ||
Download | Equivalent | |
POP3_Reset | Pas d'équivalence | Nécessite la combinaison de IMAP_Search sur les |
directe | marqueurs \Deleted et de IMAP_SetFlags pour | |
supprimer les marqueurs \Deleted | ||
POP3_BoxInfo | Pas d'équivalence | Nécessite la combinaison des commandes |
directe | IMAP_SetCurrentMB et IMAP_MsgLstInfo | |
IMAP_ MsgNumToUID | Pas d'équivalence | |
directe | ||
GetMessage | Presque équivalent | IMAP est plus puissant car il permet de |
sélectionner uniquement le corps du message | ||
POP3_Charset | Pas d'équivalence | IMAP gère automatiquement les jeux de caractères |
IMAP_Capability | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_ListMBs | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_GetMBStatus | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_SetCurrentMB | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_GetCurrentMB | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_CloseCurrentMB | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_CopyToMB | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_SubscribeMB | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_CreateMB | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_DeleteMB | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_RenameMB | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_SetFlags | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_GetFlags | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_Search | Pas d'équivalence | Spécifique au protocole IMAP |
IMAP_MsgFetch | Pas d'équivalence | Spécifique au protocole IMAP |
Notes :
Serveurs IMAP et POP3 : dans le cas des serveurs IMAP, ne gérez pas le paramètre uniqueID de la même manière car uniqueID est un entier long.
La suppression ne fonctionne pas exactement de la même manière entre les protocoles POP3 et IMAP. IMAP_Delete supprime immédiatement les messages. Pour obtenir le même résultat que POP3_Delete, utilisez la commande IMAP_SetFlags et fixer le marqueur \Deleted. Pour obtenir le même résultat que POP3_Reset, utilisez la commande IMAP_SetFlags pour récupérer les marqueurs \Deleted.
Pour une plus grande souplesse, les commandes Internet de 4D permettent de passer directement une référence de connexion IMAP aux commandes TCP de bas niveau et inversement. Pour plus d'informations, reportez-vous à la section Routines de bas niveau, Présentation.