![](/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.