Question

(en utilisant les commandes IMAP, pas avec l'aide d'un autre paquet de messagerie)

Était-ce utile?

La solution

Je ne suis pas sûr de votre connaissance de l'imap-speak, mais en gros après la connexion, "SELECT". la boîte aux lettres source, & COPIE & COPY " les messages, et " EXPUNGE " les messages (ou "SUPPRIMER" l'ancienne boîte aux lettres si elle est vide maintenant: -).

a login a s
b select source
c copy 1 othermbox
d store 1 +flags (\Deleted)
e expunge

serait un exemple de messages à envoyer. ( Remarque : les messages imap requièrent un préfixe unique avant chaque commande, ainsi le "a b c" qui se trouve en face)

Voir RFC 2060 pour plus de détails.

Autres conseils

Il y a plusieurs façons de le faire. Le meilleur est la commande UID MOVE définie dans la RFC 6851 à partir de début 2013:

C: a UID MOVE 42:69 foo
S: * OK [COPYUID 432432 42:69 1202:1229]
S: * 22 EXPUNGE
S: (more expunges)
S: a OK Done

La présence de cette extension est indiquée par la fonctionnalité MOVE .

S'il n'est pas disponible, mais que UIDPLUS ( RFC 4315 ) 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] Copied
C: a02 UID STORE 42:69 +FLAGS.SILENT (\Deleted)
S: a02 OK Stored
C: a03 UID EXPUNGE 42:69
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: a03 Expunged

Si UIDPLUS est manquant, rien de plus raisonnable que vous puissiez faire - la commande EXPUNGE supprime définitivement tous les messages marqués pour suppression, y compris ceux que vous avez supprimés. n'ont pas touché. Le mieux est simplement d’utiliser les UID COPY et UID STORE dans ce cas.

Si vous avez l'identifiant de l'email qui va être déplacé.

import imaplib

obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)
obj.login('username', 'password')
obj.select(src_folder_name)
apply_lbl_msg = obj.uid('COPY', msg_uid, desti_folder_name)
if apply_lbl_msg[0] == 'OK':
    mov, data = obj.uid('STORE', msg_uid , '+FLAGS', '(\Deleted)')
    obj.expunge()

msg_uid est l'identifiant de l'e-mail.

Je suppose que vous copiez le message dans le nouveau dossier, puis le supprimez (EXPUNGE) de l'ancien.

RFC3501

CONSEIL Il n'y a pas de commande DELETE qui fasse ce que vous voulez dire, vous devez marquer le message comme supprimé, puis EXPUNGER la boîte aux lettres. Regardez la RFC. Faites attention avec DELETE, car cela supprime des boîtes aux lettres entières, pas des mails uniques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top