Come copiare un messaggio da un server IMAP a un altro server imap utilizzando Python imaplib?

StackOverflow https://stackoverflow.com/questions/4179150

  •  10-10-2019
  •  | 
  •  

Domanda

Voglio copiare un messaggio da un server IMAP a un altro server IMAP. Non voglio alterare qualsiasi dei dati del messaggio. Sto utilizzando python imaplib.

Questo è il codice che ho provato:

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

Ma questo solleva un'eccezione:

  

imaplib.error: errore di comando UID: BAD [ '"Delivered-To: niels@domain.com']

così l'argomento (dati [0] [1]) non è formattata correttamente penso.

Il contenuto di dati [0] [1] simile a questa:

  

Delivered-To: niels@domain.com \ r \ nReceived: da 10.216.207.222 con SMTP id n27cs38120weo; \ r \ NFRI, 12 Nov 2010 09:43:47 -0800 (PST) \ r \ nReceived: da 10.200.19.19 con SMTP id y19mr234526eba.52.12894526694; \ r \ NFRI, 12 nov 2010 09:43:46 -0800 (PST) \ r \ Nreturn-Path: somename@domain.com \ r \ nReceived: da dub0-omc1- s20.dub03.hotmail.com (dub0-omc1-s20.dub03.hotmail.com [157.55.0.220]) \ r \ n ......

Come posso risolvere questo problema?

Aggiornamento:? Con l'aiuto di Odino e Avadhesh posso aggiungere messaggi ora, ma come faccio a ottenere l'UID di un messaggio appena aggiunto

È stato utile?

Soluzione 3

Risolto!

Per prima cosa copiare il messaggio con

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

Poi recuperare l'unico messaggio-id dal messaggio copiato come questo

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

Quindi utilizzare il messaggio-id per trovare il nuovo messaggio nella cassetta postale di destinazione come questo

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

Altri suggerimenti

È possibile provare il seguente codice:

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))

dove le bandiere sarebbero '(\ Seen)' in caso di e-mail visto o '' in caso di e-mail non visto.

Hai provato:

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

RFC3501 mostra la sintassi del comando UID come segue:

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

vale a dire. ci sembra di non essere un comando "UID APPEND".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top