如何从Mailman邮件服务器备份的.pck文件中提取邮件列表?
如何从Mailman邮件服务器备份的.pck文件中提取邮件列表?
别慌!我完全理解你现在的处境——管理员突然离职没交接,关键的邮件列表还锁在这些奇怪的.pck文件里,太闹心了。好在你猜的没错,这些文件就是Mailman邮件服务器用来存储列表数据的,下面我给你两种简单的方法来提取里面的内容:
方法一:用Python直接读取(快速查看,无需搭建环境)
这些.pck文件是Python的pickle格式(把Python对象转成二进制存储的格式),我们可以用Python直接解析:
- 先确认服务器上有Python:打开终端输入
python3 --version或python --version,Mailman本身就是Python写的,大概率已经安装好了。 - 进入到某个邮件列表的备份文件夹(比如
lists/你的列表名/目录下)。 - 新建一个文本文件(比如叫
read_list.py),把下面的代码粘进去:
import pickle # 读取核心配置文件config.pck,这里存着订阅者和列表基础信息 try: with open('config.pck', 'rb') as f: # 如果是旧版Mailman(用Python2生成的文件),把下面一行改成: # config_data = pickle.load(f, encoding='latin1') config_data = pickle.load(f) print("=== 邮件列表基本信息 ===") print(f"列表名称: {config_data['list_name']}") print(f"列表描述: {config_data['description']}") print("\n=== 已订阅成员列表 ===") # 不同Mailman版本存储订阅者的键可能不同,两种情况都试一下 if 'members' in config_data: for email in config_data['members']: print(email) elif 'member_dict' in config_data: for email, _ in config_data['member_dict'].items(): print(email) else: print("未找到订阅者数据,可尝试打印config_data查看所有字段") except Exception as e: print(f"读取出错了: {e}") print("如果是版本兼容问题,记得给pickle.load加上encoding='latin1'参数")
- 保存文件后,在终端运行
python3 read_list.py(如果是Python2就用python read_list.py),就能看到列表的订阅者和基础信息了。
方法二:临时搭建Mailman环境恢复备份(可视化查看,更直观)
如果觉得写代码麻烦,可以用这个更“傻瓜”的方法:
- 找一台临时服务器或本地电脑,安装和你原服务器一致版本的Mailman(比如原先是Mailman 2.1就装2.1版本,Mailman 3就装3.x)。
- 把备份的整个
lists文件夹复制到Mailman的列表存储目录:- Mailman 2.x默认目录:
/var/lib/mailman/lists/ - Mailman 3默认目录:
/opt/mailman/core/var/mailman/lists/(不同安装方式可能有差异)
- Mailman 2.x默认目录:
- 重启Mailman服务,然后访问Mailman的web管理界面(比如Mailman2是
http://服务器IP/mailman/admin/),就能直接看到所有恢复的邮件列表,可视化查看订阅者和配置。
小提示
pending.pck存的是待批准的订阅请求,request.pck是退订等用户请求,核心订阅数据都在config.pck里;- 操作时只读取文件,不要修改,避免破坏备份;
- 如果遇到Python版本不兼容的报错,记得加
encoding='latin1'参数,这是旧版Mailman的常见问题。
备注:内容来源于stack exchange,提问作者issathi
相关产品推荐
相关产品推荐

