簡體   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