(他のメールパッケージを使用せずに、IMAPコマンドを使用します)
あなたがimap-speakにどれだけ精通しているかはわかりませんが、基本的にログイン後、ソースメールボックスを「選択」し、メッセージを「コピー」し、メッセージを「EXPUNGE」します(または古いメールボックスの場合は「削除」します)今は空です:-)。
a login a s
b select source
c copy 1 othermbox
d store 1 +flags (\Deleted)
e expunge
送信するメッセージの例になります。 (注:imapメッセージでは、各コマンドの前に一意のプレフィックスが必要です。したがって、前に「a b c」があります)
詳細については、 RFC 206 を参照してください。
これを行うには複数の方法があります。最良のものは、2013年初頭から RFC 6851 で定義されたUID 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 STORE
、UID 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
とUID STORE
を使用するのが最善です。
移動するメールの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です。
メッセージを新しいフォルダにコピーしてから、古いフォルダから削除(EXPUNGE)すると思います。
[〜#〜]ヒント[〜#〜]意味することを実行するDELETEコマンドはありません。メッセージに削除済みのフラグを付けてから、EXPUNGEする必要があります。メールボックス。 RFCを見てください。 DELETEは単一のメールではなく、メールボックス全体を削除するため、注意してください。