Как скопировать сообщение с одного сервера imap на другой сервер imap, используя Python imaplib? - PullRequest
1 голос
/ 14 ноября 2010

Я хочу скопировать сообщение с одного сервера IMAP на другой сервер IMAP.Я не хочу изменять какие-либо данные сообщения.Я использую python imaplib.

Это код, который я пробовал:

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

Но возникает исключение:

imaplib.error: Ошибка команды UID: BAD ['"Delivered-To: niels@domain.com']

Таким образом, я думаю, что аргумент (data [0] [1]) не отформатирован должным образом.

Содержимое данных [0] [1] выглядит следующим образом:

Доставлено: niels@domain.com \ r \ nПолучено: по 10.216.207.222 с SMTPid n27cs38120weo; \ r \ nFri, 12 ноября 2010 г. 09:43:47 -0800 (PST) \ r \ nПоступило: по 10.200.19.19 с SMTP-идентификатором y19mr234526eba.52.12894526694; \ r \ nFri, 12 ноября 2010 г. 09:43:46-0800 (PST) \ r \ nReturn-Path: somename@domain.com \ r \ nПолучено: от dub0-omc1-s20.dub03.hotmail.com (dub0-omc1-s20.dub03.hotmail.com [157.55.0.220]) \ r \ n ......

Как это исправить?

Обновление: С помощью Wodin и Avadhesh я могудобавлять сообщения сейчас, но как мне получить UID только что добавленного сообщения?

Ответы [ 3 ]

2 голосов
/ 15 ноября 2010

Вы можете попробовать следующий код:

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

, где флаги будут '(\ Seen)' в случае увиденного письма или '' в случае невидимого письма.

1 голос
/ 14 ноября 2010

Вы пробовали:

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

RFC3501 показывает синтаксис команды UID следующим образом:

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

т.е. команда UID APPEND, похоже, не существует.

0 голосов
/ 15 ноября 2010

Решил!

Сначала скопируйте сообщение с помощью

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

Затем извлеките уникальный идентификатор сообщения из скопированного сообщения, например:

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

Затем используйте идентификатор сообщения, чтобы найти новое сообщение в почтовом ящике назначения, например,

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