2017-07-24 5 views
0

J'écris un client de messagerie en utilisant IMAPClient. Mon but est maintenant de rendre la liste des messages dans mon INBOX. Le nombre de messages s'élève à environ 4 mille. Le problème est qu'il faut les âges pour aller chercher ces lettres comme celle-ci:Python IMAPClient fetch() optimisation de la méthode pour les grandes données

server = IMAPClient(HOST, use_uid=True, ssl=True) 
server.login(USERNAME, PASSWORD)  
server.select_folder('INBOX') 
messages = server.search(['NOT DELETED']) 
response = server.fetch(messages, ['RFC822', 'BODY[TEXT]']) # TAKES AGES TO FINISH 

Il semble intuitif que je demander, par exemple, les 20 premiers messages, puis si l'utilisateur fait défiler vers le bas, demander le morceau suivant de 20 messages (triés par date de réception de la lettre). En d'autres termes, je devrais en quelque sorte paginer la commande fetch, ou la rendre paresseuse. Mais IMAPClient semble être silencieux à ce sujet, même si cela semble être un problème majeur. Des idées ?

+0

Vraisemblablement, les messages sont une liste. Brisez-le en sous-listes! – Max

Répondre

1

Votre meilleur pari est de diviser messages en morceaux et de simplement demander les messages dont vous avez besoin à la fois.

Afin de créer rapidement une liste de messages à afficher pour l'utilisateur, vous pouvez demander d'abord de demander ENVELOPE pour tous les messages. Les serveurs IMAP sont généralement optimisés pour cela et la réponse ENVELOPE est beaucoup plus petite que les réponses RFC822 ou BODY[TEXT].