You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python3中使用mailbox.Maildir存储邮件并标记为已读(Seen)?

为Maildir中新添加的邮件标记为已读(Seen)

你可以通过两种方式实现这个需求,以下是具体方案:

方法一:利用Python mailbox库原生接口

mailbox.Maildir.add()方法会返回新添加邮件的唯一键,通过这个键可以获取邮件对象,直接修改其标记属性:

import mailbox

mdir = mailbox.Maildir(maildir_path, create=True)
mdir.lock()
# 添加邮件并保存返回的键值
msg_key = mdir.add(message_string)
# 通过键获取邮件对象
msg = mdir[msg_key]
# 为邮件添加已读标记(S)
msg.add_flag('S')
# 保存修改
mdir.flush()
mdir.unlock()

方法二:直接操作Maildir文件系统

Maildir的邮件文件名格式包含标记信息,例如1699999999.M12345P6789.server:2,S中,:2,后的字符就是标记位,S对应已读状态。可以添加邮件后找到对应文件重命名来添加标记:

import os
import mailbox

mdir = mailbox.Maildir(maildir_path, create=True)
mdir.lock()
msg_key = mdir.add(message_string)
mdir.flush()

# 定位邮件文件路径(先检查new目录,再检查cur目录)
msg_path = os.path.join(maildir_path, 'new', msg_key)
if not os.path.exists(msg_path):
    msg_path = os.path.join(maildir_path, 'cur', msg_key)

# 重命名文件添加S标记
if os.path.exists(msg_path):
    if ':2,' in msg_path:
        base, flags = msg_path.rsplit(':2,', 1)
        if 'S' not in flags:
            new_path = f"{base}:2,{flags}S"
            os.rename(msg_path, new_path)
    else:
        # 新邮件无标记段,直接追加标记
        new_path = f"{msg_path}:2,S"
        os.rename(msg_path, new_path)

mdir.unlock()

注意:直接操作文件时必须保持Maildir处于锁定状态,避免并发操作引发文件冲突。

内容的提问来源于stack exchange,提问作者HippoMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 17:32:13