2010-11-14 5 views
1

Je souhaite copier un message d'un serveur IMAP vers un autre serveur IMAP. Je ne veux pas modifier les données du message. J'utilise python imaplib.Comment copier un message d'un serveur imap vers un autre serveur imap en utilisant Python imaplib?

Voici le code que j'ai essayé:

typ, data = connection1.uid('FETCH', uid, 'RFC822') 
connection2.uid('APPEND', None, data[0][1]) 

Mais cela soulève une exception:

imaplib.error: UID command error: BAD ['"Delivered-To: [email protected]']

L'argument (données [0] [1]) est pas correctement formaté je pense.

Le contenu des données [0] [1] ressembler à ceci:

Delivered-To: [email protected]\r\nReceived: by 10.216.207.222 with SMTP id n27cs38120weo;\r\nFri, 12 Nov 2010 09:43:47 -0800 (PST)\r\nReceived: by 10.200.19.19 with SMTP id y19mr234526eba.52.12894526694;\r\nFri, 12 Nov 2010 09:43:46 -0800 (PST)\r\nReturn-Path: [email protected]\r\nReceived: from dub0-omc1-s20.dub03.hotmail.com (dub0-omc1-s20.dub03.hotmail.com [157.55.0.220])\r\n ......

Comment puis-je résoudre ce problème?

Mise à jour: Avec l'aide de Wodin et Avadhesh je peux ajouter des messages maintenant, mais comment obtenir l'UID d'un message juste ajouté?

Répondre

0

Résolu!

d'abord copier le message avec

typ, data = connection1.uid('FETCH', uid, 'RFC822') 
connection2.append('Inbox', '', '', data[0][1]) 

chercher ensuite le unique, un message-id du message copié comme celui-ci

from email.parser import Parser 
parser = Parser() 
msg = parser.parsestr(data[0][1]) 

Utilisez ensuite le message-id pour trouver le nouveau message dans la destination boîte aux lettres comme ceci

typ, uid = connection2.uid('SEARCH', None, 'Header', 'Message-Id', msg['message-ID']) 
1

Avez-vous essayé:

connection2.append(mailbox, flags, date_time, message) 
    Append message to named mailbox. 

RFC3501 montre la syntaxe de la commande UID comme suit:

uid    = "UID" SP (copy/fetch/search/store) 

dire il ne semble pas être une commande "UID append".

+0

connection2.append (boîte aux lettres, '', '', données [0] [1]) fonctionne. Je vais devoir aller chercher l'uid avec une commande IMAP séparée, je suppose. Tnx. –

+0

Comment puis-je récupérer l'UID du message qui vient d'être ajouté? –

2

U peut essayer le code follwing:

typ, data = connection1.uid('FETCH', uid, 'RFC822') 
import email 
msg_str = email.message_from_string(data[0][1]) 
msg_create = connection2.append(str(dest_fold_code) , flags, '', str(msg_str)) 

où les drapeaux seraient '(\ Seen)' dans le cas du courrier électronique ou vu '' en cas de courrier électronique invisible.

Questions connexes