3

あるIMAPサーバーから別のIMAPサーバーにメッセージをコピーしたい。メッセージデータを変更したくありません。私はpythonimaplibを使用しています。

これは私が試したコードです:

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

しかし、これは例外を引き起こします:

imaplib.error:UIDコマンドエラー:BAD ['"配信先:niels@domain.com']

したがって、引数(data [0] [1])は適切にフォーマットされていないと思います。

data[0][1]の内容は次のようになります。

配信先:niels@domain.com \ r \ n受信:10.216.207.222、SMTP ID n27cs38120weo; \ r \ n金、2010年11月12日09:43:47 -0800(PST)\ r \ n受信:10.200.19.19 SMTP ID y19mr234526eba.52.12894526694; \ r \ n2010年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を取得するにはどうすればよいですか?

4

3 に答える 3

2

次のコードを試すことができます。

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)'、電子メールが表示されていない場合は''になります。

于 2010-11-15T05:23:34.180 に答える
1

解決しました!

最初にメッセージをコピーします

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'])
于 2010-11-15T15:56:37.300 に答える
1

やってみました:

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

RFC3501は、UIDコマンドの構文を次のように示しています。

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

つまり、「UIDAPPEND」コマンドがないようです。

于 2010-11-14T20:42:01.997 に答える