(en utilisant les commandes IMAP, sans l'aide d'aucun autre package de messagerie)
Réponses
Trop de publicités?Il existe plusieurs façons de le faire. La meilleure est la commande UID MOVE
définie dans RFC 6851 de début 2013 :
C: a UID MOVE 42:69 foo
S: * OK [COPYUID 432432 42:69 1202:1229]
S: * 22 EXPUNGE
S: (plus d'expurgations)
S: a OK Done
La présence de cette extension est indiquée par la capacité MOVE
.
Si elle n'est pas disponible, mais que UIDPLUS
(RFC 4315) l'est, la deuxième meilleure option consiste à utiliser la combinaison de UID STORE
, UID COPY
et UID EXPUNGE
:
C: a01 UID COPY 42:69 foo
S: a01 OK [COPYUID 432432 42:69 1202:1229] Copié
C: a02 UID STORE 42:69 +FLAGS.SILENT (\Deleted)
S: a02 OK Stocké
C: a03 UID EXPUNGE 42:69
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: a03 Expurgé
Si le UIDPLUS
est manquant, il n'y a rien de raisonnable que vous puissiez faire -- la commande EXPUNGE
supprime définitivement tous les messages marqués pour suppression, y compris ceux que vous n'avez pas touchés. Le mieux est d'utiliser simplement les commandes UID COPY
et UID STORE
dans ce cas.
Je ne suis pas sûr que vous soyez bien au fait du langage imap, mais en gros après la connexion, "SÉLECTIONNEZ" la boîte aux lettres source, "COPIEZ" les messages et "EXPURGEZ" les messages (ou "SUPPRIMEZ" l'ancienne boîte aux lettres si elle est vide maintenant :-).
a connexion a s
b sélectionnez source
c copiez 1 autreboîte
d stockez 1 +drapeaux (\Deleted)
e expurgez
serait un exemple de messages à envoyer. (Note : Les messages imap nécessitent un préfixe unique avant chaque commande, d'où le "a b c" devant)
Consultez RFC 2060 pour plus de détails.
Si vous avez l'UID de l'e-mail qui va être déplacé.
import imaplib
obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)
obj.login('nom_utilisateur', 'mot_de_passe')
obj.select(nom_dossier_source)
apply_lbl_msg = obj.uid('COPY', msg_uid, nom_dossier_destination)
if apply_lbl_msg[0] == 'OK':
mov, data = obj.uid('STORE', msg_uid , '+FLAGS', '(\Deleted)')
obj.expunge()
Où msg_uid est l'UID du message.
Je suppose que vous COPIEZ le message dans le nouveau dossier, puis le supprimez (PURGER) dans l'ancien.
ASTUCE Il n'y a pas de commande DELETE qui fait ce que vous voulez, vous devez marquer le message comme supprimé, puis PURGER la boîte aux lettres. Consultez le RFC. Faites attention avec DELETE, car il supprime des boîtes aux lettres entières, pas des courriers individuels.