繁体   English   中英

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

[英]How to copy a message from one imap server to another imap server using Python imaplib?

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

这是我尝试的代码:

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

但这引发了一个例外:

imaplib.error:UID命令错误:错误['“交付至:niels@domain.com']

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

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

收件人:niels@domain.com \\ r \\ n接收:带有SMTP ID n27cs38120weo的10.216.207.222; \\ r \\ nFri,2010年11月12日09:43:47 -0800(PST)\\ r \\ n接收:包括10.200.19.19 SMTP ID为y19mr234526eba.52.12894526694; \\ r \\ nFri,2010年11月12日09:43:46 -0800(PST)\\ r \\ n返回路径:somename@domain.com \\ r \\ n接收:来自dub0-omc1-s20.dub03 .hotmail.com(dub0-omc1-s20.dub03.hotmail.com [157.55.0.220])\\ r \\ n ......

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

更新:现在可以在Wodin和Avadhesh的帮助下附加邮件,但是如何获取刚刚附加的邮件的UID?

您可以尝试以下代码:

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)”,如果看不到电子邮件,则标记为“”。

你有没有尝试过:

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

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

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

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

解决了!

首先将邮件复制为

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM