2017-05-04 10 views
0

特定の件名のメッセージを移動するためのPythonスクリプトがあります。メッセージは読み取り済みとマークされ、読み取り済みとしてマークされたくありません。スクリプトのどの部分を読んだものとしてマークし、どのように読んだとしてマークしないのですか?Python IMAP4メッセージを既読としてマークしない

また、私はまだ何をしているのか分からないので、冗長なコードやエラーがある場合はお知らせください。本体は、読み取りとしてマークメッセージをフェッチ

import getpass 
from Crypto.Hash import MD5 
import sys 
import imaplib 
import email 
import re 

password = getpass.getpass() 
match = "redacted" 

username = "redacted" 
dest = "000" 
pattern_uid = re.compile('\d+ \(UID (?P<uid>\d+)\)') 

def md5(message): 
    hash = MD5.new() 
    hash.update(message) 
    return hash.hexdigest() 

md5 = md5(password) 

if md5 == match: 
    pass 
else: 
    print "Mismatch" 
    sys.exit() 

M = imaplib.IMAP4_SSL("mail.redacted.com", 993) 
M.login(username, password) 
M.select() 
typ, data = M.search(None, 'ALL') 
M.select('Inbox') 

msgs = M.search(None, 'ALL')[1] 
num_messages = len(msgs[0].split()) 
num_messages += 1 


def parse_uid(data): 
    match = pattern_uid.match(data) 
    return match.group('uid') 

for i in range(1, num_messages): 
    try: 
     typ, msg_data = M.fetch(str(i), '(RFC822)') 
    except: 
     pass 
    for response_part in msg_data: 
     if isinstance(response_part, tuple): 
      UID = M.fetch(str(i),'UID') 
      UID = UID[1] 
      try: 
       UID = parse_uid(UID[0]) 
      except: 
       pass 
      msg = email.message_from_string(response_part[1]) 
      for header in [ 'subject' ]: 
       if msg[header] == "Redacted": 
        result = M.uid('COPY', UID, dest) 
        if result[0] == 'OK': 
         mov, data = M.uid('STORE', UID, '+FLAGS', '(\Deleted)') 
         M.expunge() 


M.close() 
M.logout() 

答えて

1

typ, msg_data = M.fetch(str(i), '(RFC822)')

BODY.PEEK[]を使用します。

メッセージをコピーするだけでメッセージ全体を取得する理由はわかりませんが、なぜヘッダーを取得しないのですか? BODY.PEEK[HEADERS]を使用してください。

+0

ここでメッセージ本文を取得していますか? msg_data、(RFC822) ')? –

+0

(RFC822) ')をBODY.PEEK [HEADERS]に変更する必要がありますか? –

+0

UID = parse_uid(UID [0]) –

関連する問題