22

(他のメールパッケージの助けを借りずに IMAP コマンドを使用)

4

4 に答える 4

29

それには複数の方法があります。最適なものは、2013 年初頭からRFC 6851UID MOVEで定義されているコマンドです。

C: a UID MOVE 42:69 foo
S: * OK [COPYUID 432432 42:69 1202:1229]
S: * 22 EXPUNGE
S: (more expunges)
S: a OK Done

この拡張機能の存在は、機能によって示されMOVEます。

利用できないがUIDPLUS( RFC 4315 ) 利用できる場合、2 番目に最適なオプションはUID STOREUID COPYとの組み合わせを使用することUID EXPUNGEです。

C: a01 UID COPY 42:69 foo
S: a01 OK [COPYUID 432432 42:69 1202:1229] Copied
C: a02 UID STORE 42:69 +FLAGS.SILENT (\Deleted)
S: a02 OK Stored
C: a03 UID EXPUNGE 42:69
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: * 10 EXPUNGE
S: a03 Expunged

が欠落している場合、UIDPLUS合理的にできることは何もありません。このEXPUNGEコマンドは、削除対象としてマークされたすべてのメッセージを、あなたが触れていないものも含めて永久に削除します。UID COPYその場合はandを使用するのが最善UID STOREです。

于 2013-04-04T15:57:57.243 に答える
19

あなたが imap-speak にどれほど精通しているかはわかりませんが、基本的にはログイン後、元のメールボックスを「選択」し、メッセージを「コピー」し、メッセージを「削除」します (古いメールボックスが古い場合は「削除」します)。今は空です:-)。

a login a s
b select source
c copy 1 othermbox
d store 1 +flags (\Deleted)
e expunge

送信するメッセージの例です。(: imap メッセージでは、各コマンドの前に一意のプレフィックスが必要なため、先頭に「ab c」が必要です)

詳細については、 RFC 2060を参照してください。

于 2008-09-23T16:59:10.580 に答える
16

移動しようとしている電子メールの uid がある場合。

import imaplib

obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)
obj.login('username', 'password')
obj.select(src_folder_name)
apply_lbl_msg = obj.uid('COPY', msg_uid, desti_folder_name)
if apply_lbl_msg[0] == 'OK':
    mov, data = obj.uid('STORE', msg_uid , '+FLAGS', '(\Deleted)')
    obj.expunge()

msg_uidはメールの uid です

于 2010-07-01T09:28:21.453 に答える
4

メッセージを新しいフォルダーにコピーしてから、古いフォルダーで削除 (EXPUNGE) すると思います。

RFC3501

ヒントあなたが意味することを行う DELETE コマンドはありません。メッセージに削除済みのフラグを立ててから、メールボックスを EXPUNGE する必要があります。RFC を参照してください。単一のメールではなく、メールボックス全体を削除するため、DELETE には注意してください。

于 2008-09-23T16:58:03.577 に答える