2010-11-14 106 views
1

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

这是我试过的代码:

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

但是,这引发了一个异常:

imaplib.error: UID command error: BAD ['"Delivered-To: [email protected]']

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

数据的内容[0] [1]是这样的:

Delivered-To: [email protected]\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: [email protected]\r\nReceived: from dub0-omc1-s20.dub03.hotmail.com (dub0-omc1-s20.dub03.hotmail.com [157.55.0.220])\r\n ......

我该如何解决这个问题?

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

回答

0

解决了!

第一拷贝和

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

复制的信息获取唯一的消息-ID然后使用邮件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 APPEND” 命令。

+0

connection2.append(mailbox,'','',data [0] [1])起作用。我将不得不用一个单独的IMAP命令来获取uid。 TNX。 – 2010-11-14 21:54:52

+0

如何获取刚添加的邮件的uid? – 2010-11-14 22:02:46

2

U可以尝试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)) 

其中标志将是“(\看)”在看不见的电子邮件时看到的电子邮件或“”的情况。

相关问题