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']))
預設地,消息沒有标志,增加一個标志會改變記憶體中的消息,不過不會更新磁盤上的消息。要更新磁盤上的消息,可以使用現有的辨別符把消息對象存儲在郵箱裡。
用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标志就丢失了。