如何使用pythonimaplib将消息从一个imap服务器复制到另一个imap服务器?

2024-05-18 11:33:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将邮件从一台IMAP服务器复制到另一台IMAP服务器。我不想更改任何消息数据。我使用的是python imaplib。在

这是我尝试过的代码:

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

但这引发了一个例外:

imaplib.error: UID command error: BAD ['"Delivered-To: niels@domain.com']

所以我认为参数(data[0][1])的格式不正确。在

数据[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?在


Tags: to数据服务器com消息uiddatadomain
3条回答

您可以尝试以下代码:

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)”,对于未看到的电子邮件,标志为“”。在

解决了!在

首先用

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

然后从复制的消息中获取唯一的消息id,如下所示

^{pr2}$

然后使用邮件id在目标邮箱中查找新邮件,如下所示

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

您是否尝试过:

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

RFC3501显示UID命令的语法,如下所示:

^{pr2}$

也就是说,似乎没有“UID APPEND”命令。在

相关问题 更多 >