Как скопировать сообщение с одного сервера IMAP на другой сервер IMAP с помощью Python Imaplib?
Вопрос
Я хочу скопировать сообщение с одного сервера IMAP на другой сервер IMAP. Я не хочу изменять какие -либо данные сообщения. Я использую Python Imaplib.
Это код, который я пробовал:
typ, data = connection1.uid('FETCH', uid, 'RFC822')
connection2.uid('APPEND', None, data[0][1])
Но это поднимает исключение:
imaplib.error: ошибка команды UID: Bad ['' ueldate-to: niels@domain.com '
Таким образом, аргумент (данные [0] [1]), я думаю, не отформатирован должным образом.
Содержание данных [0] [1] выглядит так:
Доставлено: niels@domain.com r nreceived: к 10.216.207.222 с SMTP ID N27CS38120WEO; r nfri, 12 ноября 2010 09:43:47 -0800 (PST) r nreceived: By 10.200.19.19.19. с SMTP ID Y19MR234526EBA.52.12894526694; r nfri, 12 ноября 2010 09:43:46 -0800 (PST) r nreturn-path: somename@domain.com r nreceived: от dub0-2-20.dub03 .hotmail.com (dub0-omc1-20.dub03.hotmail.com [157.55.0.220]) r n ......
Как я могу это исправить?
Обновлять: С помощью Wodin и Avadhesh я могу добавить сообщения сейчас, но как мне получить UID только что добавленного сообщения?
Решение 3
Решен!
Сначала скопируйте сообщение с
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'])
Другие советы
Вы можете попробовать код 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))
где флаги будут «( vise)» в случае просмотра электронной почты или «в случае невидимой электронной почты».
Ты пытался:
connection2.append(mailbox, flags, date_time, message)
Append message to named mailbox.
RFC3501 показывает синтаксис команды UID следующим образом:
uid = "UID" SP (copy / fetch / search / store)
то есть, кажется, не является командой «UID приложения».