![](/img/trans.png)
[英]How do I perform an IMAP search in Python (using Gmail and imaplib)?
[英]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.