上記のPhilipT.の回答とRFC3501および RFC2822に基づいて、10日以上経過したメールを既読としてマークするためのコード行をいくつか作成しました。月の省略名には静的リストが使用されます。これは特に洗練されたものではありませんが、Pythonの%bフォーマット文字列はロケールに依存しているため、不快な驚きを与える可能性があります。すべてのIMAPコマンドはUIDベースです。
import imaplib, datetime
myAccount = imaplib.IMAP4(<imapserver>)
myAccount.login(<imapuser>, <password>)
myAccount.select(<mailbox>)
monthListRfc2822 = ['0', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
beforeDate = datetime.datetime.today() - datetime.timedelta(days = 10)
beforeDateString = ("(BEFORE %s-%s-%s)"
% (beforeDate.strftime('%d'),
monthListRfc2822[beforeDate.month],
beforeDate.strftime('%Y')))
typ, data = myAccount.uid('SEARCH', beforeDateString)
for uid in data[0].split():
myAccount.uid('STORE', uid, '+FLAGS', '(\Seen)')
ちなみに、私の場合(dovecot IMAPサーバー)の検索文字列で日付区切り文字として「-」を使用する必要があった理由はわかりません。私には、RFC 2822と矛盾しているように見えます。ただし、区切り文字として単純な空白を含む日付は、IMAPエラーのみを返しました。