如何使用Python imaplib从一个imap服务器复制信息到另一个imap服务器?

4

我希望能够将一条信息从一个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])的格式不正确。

data [0] [1]的内容如下:

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

我该如何解决这个问题?

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

3个回答

2
你可以尝试以下代码:
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)”,未读邮件的标记为空。


2

问题解决了!

首先复制消息

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

然后使用消息ID在目标邮箱中查找新消息,如下所示

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

1

你试过了吗:

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

RFC3501 将 UID 命令的语法定义如下:

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

即似乎没有“UID APPEND”命令。


connection2.append(mailbox, '','', data[0][1]) 可以工作。我想我需要使用单独的IMAP命令来获取uid。谢谢。 - i.amniels
我该如何获取刚刚附加的消息的uid? - i.amniels

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接