0

各メールを印刷できます。私がやりたいのは、各メールで文字列を検索し、文字列がある場合は true または false を返すことです。これを行うにはどうすればパラセできmsgますか?

conn.select(readonly=1) # Select inbox or default namespace
(retcode, messages) = conn.search(None, '(UNSEEN)')
if retcode == 'OK':
    for num in messages[0].split(' '):
        print 'Processing :', messages
        typ, data = conn.fetch(num,'(RFC822)')
        msg = email.message_from_string(data[0][1])
        typ, data = conn.store(num,'-FLAGS','\\Seen')
        if retcode == 'OK':
            print data,'\n',30*'-'
            for line in msg:
                if "Subject: Thanks for your Walmart.com Order" in line:
                    print line

conn.close()
4

1 に答える 1

1

email オブジェクトを取得しmsgたら、次のことができます。

message_lines = msg.get_payload().splitlines()

次に、各行をループします。

for line in message_lines:
    if 'Walmart' in line:
        pass # do whatever

しかし、繰り返しになりますが、ペイロードが何であるかに注意してください...

もう 1 つのオプションは、IMAP サーバーに作業をさせることです。

(retcode, messages) = conn.search(None, '(UNSEEN) (TEXT walmart)')

これにより、フェッチする必要があるメッセージの数がサブセット化され、必要に応じてより複雑なマッチング適用できます...

また、件名で検索することもできます (それが最終的にやりたいことである場合):

(retcode, messages) = conn.search(None, '(UNSEEN) (SUBJECT Thanks for your Walmart.com Order)')
于 2012-11-03T20:10:23.990 に答える