Как скопировать сообщение с одного сервера IMAP на другой сервер IMAP с помощью Python Imaplib?

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

  •  10-10-2019
  •  | 
  •  

Вопрос

Я хочу скопировать сообщение с одного сервера 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 приложения».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top