天天看點

第十二章:email-mailbox:管理email歸檔-Maildir-消息标志

13.3.3 消息标志

郵箱中的消息有一些标志,可以用來跟蹤消息是否已讀、是否被标記為重要消息或者是否被标記為以後要删除等方面。這些标志被存儲為一個特定于格式的字母編碼序列,Message類提供了一些方法來擷取和改變這些标志的值。下面這個例子在增加标志來訓示消息很重要之前,首先顯示Example Maildir中消息的标志。

import mailbox

print('Before:')
mbox = mailbox.Maildir('Example')
mbox.lock()
try:
    for message_id,message in mbox.iteritems():
        print('{:6} "{}"'.format(message.get_flags(),
                                 message['subject']))
        message.add_flag('F')
        # Tell the mailbox to update the message.
        mbox[message_id] = message
finally:
    mbox.flush()
    mbox.close()

print('\nAfter:')
mbox = mailbox.Maildir('Example')
for message in mbox:
    print('{:6} "{}"'.format(message.get_flags(),
                             message['subject']))
           

預設地,消息沒有标志,增加一個标志會改變記憶體中的消息,不過不會更新磁盤上的消息。要更新磁盤上的消息,可以使用現有的辨別符把消息對象存儲在郵箱裡。

第十二章:email-mailbox:管理email歸檔-Maildir-消息标志

用add_flag()增加标志會保留所有現有的标志。使用set_flags()則會覆寫現有的标志集,把它替換為傳遞給這個方法的新值。

import mailbox

print('Before:')
mbox = mailbox.Maildir('Example')
mbox.lock()
try:
    for message_id,message in mbox.iteritems():
        print('{:6} "{}"'.format(message.get_flags(),
                                 message['subject']))
        message.add_flag('S')
        # Tell the mailbox to update the message.
        mbox[message_id] = message
finally:
    mbox.flush()
    mbox.close()

print('\nAfter:')
mbox = mailbox.Maildir('Example')
for message in mbox:
    print('{:6} "{}"'.format(message.get_flags(),
                             message['subject']))
           

在這個例子中,當set_flags()把标志替換為S時,上例增加的F标志就丢失了。

第十二章:email-mailbox:管理email歸檔-Maildir-消息标志

繼續閱讀