如何使用Python Imaplib将消息从一台IMAP服务器复制到另一台IMAP服务器?

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命令错误:糟糕['“交付到:niels@domain.com'

因此,我认为参数(数据[0] [1])的格式不正确。

数据的内容[0] [1]看起来像这样:

交付:niels@domain.com r r nReceived:到10.216.207.222,带有SMTP ID N27CS38120WEO; r nfri,2010年11月12日09:43:47-0800(PST)带有SMTP ID Y19MR234526EBA.52.12894526694; r nfri,2010年11月12日09:43:46 -0800(pst) r r nreturn-path:somename@domain.com@r r r r r r r r r r r r nreceive:from dub0-omc1-s20.dub0-mc1s2033。 .hotmail.com(dub0-omc1-s20.dub03.hotmail.com [157.55.0.220]) r n .....

我怎样才能解决这个问题?

更新: 在Wodin和Avadhesh的帮助下,我现在可以附加消息,但是如何获得Just Apped Messages的UID?

有帮助吗?

解决方案 3

解决了!

首先复制消息

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

然后从这样的复制消息中获取唯一的消息-ID

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

然后使用Message-ID在此类邮箱中查找新消息

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

如果在没有看到的电子邮件的情况下,将旗帜'( see)'( see)'。

你有没有尝试过:

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