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标志就丢失了。