IMAP:メッセージをあるフォルダーから別のフォルダーに移動する方法

StackOverflow https://stackoverflow.com/questions/122267

  •  02-07-2019
  •  | 
  •  

質問

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

役に立ちましたか?

解決

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

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

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

見る RFC2060 詳細については。

他のヒント

それには複数の方法があります。一番いいのは、 UID MOVE で定義されたコマンド RFC 6851 2013 年初頭から:

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) の場合、次善の選択肢は、次の組み合わせを使用することです。 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) したと思います。

RFC3501

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top