Sympa 配置参数详解
Sympa 6.2.80 三层配置体系(sympa.conf/robot.conf/list config)与 388 个命名参数详解,按 Schema.pm 8 组分组覆盖站点描述数据库日志MTA对接列表定义收发控制归档退信周期任务WebSOAP安全,含B1实测 Postfix 别名权限坑、compound 参数段落写法、废弃参数映射。
Sympa 6.2.80 配置参数详解
目标:覆盖 Sympa 三层配置文件(
sympa.conf/robot.conf/ 每列表config)的主要参数,按 8 个功能组讲解名称、默认值、格式与生效层级,穿插 B1 实测排障结论(别名文件权限、Postfix 双 map)和 sympa.conf.in 安装必改参数速查。所有参数定义均出自 6.2.80 官方源码Sympa::Config::Schema与sympa_config(5)man page(2026-10-27 读取)。组件背景见 《Sympa 6.2.80 介绍与选型指南》,安装实测见 《Sympa 6.2.66 Ubuntu 22.04 安装指南》,Compose 化部署见 《Sympa 6.2.66 Docker Compose 部署指南》。
一、配置体系概述
1.1 三层继承(覆盖规则)
Sympa 有三级配置文件,底层到顶层逐层覆盖:
| 层级 | 文件 | 路径(Debian 包) | 生效范围 |
|---|---|---|---|
| 站点全局 | sympa.conf | /etc/sympa/sympa/sympa.conf | 所有域的默认值,首次安装必须创建 |
| 虚拟域(可选) | robot.conf | /etc/sympa/sympa/<域名>/robot.conf | 同一台机器承载多个邮件域时按域覆写 |
| 单列表 | config | /var/lib/sympa/list_data/<列表>@<域>/config | 每个列表独立配置,建列表时生成 |
查找顺序:某参数在列表 config 里有则用它,否则查 robot.conf,再否则回退 sympa.conf,最终兜底源码内置默认值。
1.2 参数格式
两类参数(6.2.70 起 compound 参数改 . 分隔语法,保留空格分隔兼容):
-
简单参数:一行一个,空格分隔。
listmaster listmaster@example.org -
复合参数(compound):以段落方式写,首行是组名,后续缩进子参数(或用
.连接)。# 旧语法(空格 + 缩进) archive web_access open mail_access closed # 新语法(6.2.70+,点号) archive.web_access open archive.mail_access closed
1.3 上下文(context)
每个参数声明所属层级——只能在哪几个文件里出现。man page 里的 context 字段:
- site →
sympa.conf专属(如db_*数据库参数) - domain →
robot.conf可选(如domain、listmaster,站点和域都能设) - list → 单列表
config专属(如subject、visibility) - 有些参数同时支持 site + domain + list 三层(如
lang、priority)
二、安装必改参数速查
sympa.conf.in 官方最小模板(Debian 包自动生成,72 行)只标了 6 个必须手动设置的参数——其他全部走内置默认值即可跑通:
| 参数 | 必改 | 建议值 | context | 说明 |
|---|---|---|---|---|
domain | ✅ | mail.example.org | site/domain | 主邮件域,列表地址后缀。B1 实测:默认空,sympa_msg.pl 起不来 |
listmaster | ✅ | admin@mail.example.org | site/domain | 超级管理员邮箱,审批/告警/首登密码都发给它 |
db_type | ✅ | SQLite(默认)/ MySQL / PostgreSQL | site | 数据库类型,Debian 包用 SQLite 开箱即用 |
db_name | ⚠️ | 默认 sympa | site | SQLite 时填 DB 文件全路径;MySQL/PG 填逻辑库名 |
wwsympa_url | ✅(Web 面) | http://mail.example.org/wws | site/domain | wwsympa Web 界面 URL,不配则 Web 面不可用 |
soap_url | ⚠️(SOAP API) | http://mail.example.org/sympa_soap_server.fcgi | site/domain | SOAP API URL,不配则 SOAP 不可用 |
B1 实测追加的必改项(Debian 包默认值有坑):
| 参数 | 必改 | 原因 | 实测值 |
|---|---|---|---|
sendmail_aliases | ✅ | 默认指向 /etc/aliases(root:root 644),sympa 用户无写权,建列表时报 Permission denied | /var/lib/sympa/sympa_aliases(chown sympa:sympa) |
💡 这一条是 B1 唯一卡壳的点,postfix 双 map(
hash:/etc/aliases, hash:/var/lib/sympa/sympa_aliases)同时引用系统别名与 sympa 别名即解决。详见 《Sympa 6.2.66 Ubuntu 22.04 安装指南》 第三章。
三、功能组详解
以下按 Schema.pm 的 group 划分,覆盖核心与高频参数。每组先给组名 + 关键参数表格,再给实测/默认值示例。
3.1 站点描述(presentation + description)
决定服务对外长什么样:标题、语言、虚拟域、可见性、列表定义。
| 参数 | 默认值 | context | 说明 |
|---|---|---|---|
title | Mailing lists service | site/domain | Web 页面 header、通知邮件发件人显示名 |
gecos | SYMPA | site/domain | Sympa 自发邮件的 From: 显示名(6.2a.34+) |
domain | 无(必填) | site/domain | 主邮件域,单域场景一个 robot;多域每个 robot.conf 各设一个 |
listmaster | 无(必填) | site/domain | 超级管理员邮箱,可多值逗号分隔 |
supported_lang | ca,cs,de,el,en-US,es,...zh-CN,zh-TW | site/domain | Web 面可选语言全集,locale 没装的语言自动忽略 |
lang | en-US | site/domain/list | 列表默认语言,初始化用户语言偏好 |
legacy_character_support_feature | off | site | 开启旧编码(如 iso-2022-jp 日语)支持,按 charset.conf 配置 |
visibility | conceal | site/domain/list | 列表在公共列表页/LISTS 命令中的可见性 |
max_list_members | 0(无限制) | site/domain/list | 订阅者上限,0 不限制 |
priority | 5 | site/domain/list | spool 中消息优先级(0 最高,z 冻结在队列) |
visibility 四个可选值:
| 值 | 行为 |
|---|---|
conceal | 仅订阅者可见(默认,讨论列表安全) |
identified | 匿名用户隐藏,已登录用户可见 |
noconceal | 完全公开 |
secret | 连订阅者也隐藏(高保密) |
3.2 数据库(database)
全部 site 级,Debian 包用 SQLite 开箱即用,生产 MySQL/PG 配完整连接参数。
| 参数 | 默认值 | context | 说明 |
|---|---|---|---|
db_type | mysql | site | 可选 MySQL / PostgreSQL / SQLite / Oracle |
db_name | sympa | site | SQLite 时必须是文件全路径,如 /var/lib/sympa/sympa.db;MySQL/PG 填库名 |
db_host | 无 | site | DB 主机名;PostgreSQL 也可写 socket 目录如 /var/run/postgresql |
db_port | 无 | site | DB 端口,MySQL 默认 3306,PG 默认 5432 |
db_user | 无 | site | DB 用户名 |
db_passwd | 无 | site | DB 密码,生产务必保护(chmod 600 sympa.conf) |
db_options | 无 | site | 追加到 DSN 的驱动专有选项,如 mysql_read_default_file=...;mysql_socket=... |
db_env | 无 | site | Oracle 场景的环境变量,如 NLS_LANG=...;ORACLE_HOME=... |
db_timeout | 无 | site | DB 操作超时秒数(当前仅 SQLite 用) |
update_db_field_types | auto | site | 自动升级表结构,off 关闭 |
db_additional_subscriber_fields | 无 | site | subscriber_table 自定义字段(如 billing_delay),模板/scenario 可引用 |
db_additional_user_fields | 无 | site | user_table 自定义字段(如 age,address) |
3.3 日志(logging)
| 参数 | 默认值 | context | 说明 |
|---|---|---|---|
syslog | LOCAL1 | site | syslog facility,Sympa 进程日志发往这里 |
log_socket_type | unix | site | syslog 通信模式,unix(socket)/ inet(UDP/TCP) |
log_level | 0 | site/domain | 日志详细度,0=仅主操作,3=几乎全部;生产建议 2 |
log_facility | LOCAL1 | site | 旧名,等价 syslog |
log_condition | 无 | site | 仅记录满足条件的日志条目,复杂场景用 |
logs_expiration_period | 无 | site | 日志文件保留期,过期自动清理 |
B1 实测:Debian 包默认 log_level=0,查问题时临时 log_level 2 重启 sympa.service 即可,不影响投递。
3.4 MTA 对接(mta)
Sympa 不自带 MTA,通过以下参数桥接 Postfix/Exim/Sendmail。
| 参数 | 默认值 | context | 说明 |
|---|---|---|---|
sendmail | /usr/sbin/sendmail | site | MTA 提供的 sendmail 兼容二进制路径 |
sendmail_args | -oi -odi -oem | site | 传给 sendmail 的参数,Sympa 自动追加 -f/-N/-V 和收件人 |
sendmail_aliases | $SENDMAIL_ALIASES(Debian 包 /etc/aliases) | site/domain | B1 实测必改:Sympa 写列表别名的文件,改到可写路径 |
aliases_program | newaliases | site/domain | 重建别名 DB 的命令,可选 makemap/newaliases/postalias/postmap 或自定义 |
aliases_wrapper | on | site/domain | 是否用 wrapper(sympa_newaliases-wrapper),6.2.59+;不需要 root 权限时设 off |
aliases_db_type | hash | site/domain | 别名 DB 类型,hash/btree/dbm/cdb 等 |
alias_manager | $SBINDIR/alias_manager.pl | site | 别名管理器脚本绝对路径,可换成 ldap_alias_manager.pl 或 mysql_alias_manager.pl |
B1 实测 Postfix 完整对接:
# sympa.conf 必加
sendmail_aliases /var/lib/sympa/sympa_aliases
# Postfix main.cf
alias_maps = hash:/etc/aliases, hash:/var/lib/sympa/sympa_aliases
alias_database = hash:/etc/aliases, hash:/var/lib/sympa/sympa_aliases
3.5 接收控制(incoming)
Sympa_msg.pl 收信时的判定与改写。
| 参数 | 默认值 | context | 说明 |
|---|---|---|---|
sender_headers | From | site | 用于识别发件人的邮件头字段列表(逗号分隔),可选加 Return-Path/Resent-From |
misaddressed_commands | reject | site | 收到误发的邮件命令时的行为,reject(拒信,默认)/ignore(放行正文) |
misaddressed_commands_regexp | 内置正则 | site | 识别误发命令的 Perl regexp,默认匹配 subscribe/unsubscribe/set/mail/nomail/digest |
sympa_priority | 1(高) | site/domain | 命令类消息的 spool 优先级,普通列表消息默认 5 |
message_hook | 无 | site | 外部消息改写钩子脚本路径 |
remove_headers | 无 | site | 出站时剥离的邮件头(逗号分隔),如 User-Agent,Importance |
incoming_max_count | 无 | site | 单次投递的最大收件人数,防止一次信塞爆 bulk |
loop_prevention_regex | 内置 regexp | site | 识别邮件循环的 regexp,命中则丢弃 |
3.6 投递与分发(sending + command)
Bulk 引擎投递策略、digest 行为、命令行改写。
| 参数 | 默认值 | context | 说明 |
|---|---|---|---|
bulk_max_count | 1500 | site | 单次 bulk 进程最多投递的收件人数 |
bulk_fork_threshold | 1 | site | 多少封 bulk 信积压后 fork 新进程并行投递 |
bulk_sleep | 0 | site | 每次投递之间 sleep 秒数(降速用) |
delivery_time | 无 | site | 投递时限(秒),超时重试 |
digest | (列表 config 层必填) | list | 摘要发送频率,daily/weekly/monthly 或 none |
digest_max_size | 120000 | site | 单封摘要的最大字节数 |
distribution_mode | recommended | site/domain/list | 投递模式,影响 scenario 判定;多数场景用默认值 |
distribution_ttl | 0(无限) | site/domain/list | 消息在队列中的最大存活期(秒),过期丢弃 |
verp_rate | 0(关闭) | site/domain | VERP 拆信比例(bounce 自动追踪需要,值越大越精确但投递变慢) |
forced_reply_to / forced_replyto | 无 | list | 强制改写 Reply-To 头,把列表发件人变列表地址(讨论列表常见) |
custom_headers | 无 | list | 追加到出站邮件的头(可多次出现),如 X-List: mylist |
custom_subject | 无 | site/domain/list | 改写 Subject 的模板串(TT2),如 `[% msg.subject %] |
3.7 归档 / 退信 / 周期任务(archive + bounce + tasks)
全部以 compound parameter(paragraph 或点号分隔)写法,man page 给了完整子参数。
Archive(归档)
# 段写法
archive
web_access open
mail_access closed
default_index by_thread
# 点号写法(6.2.70+)
archive.web_access open
archive.mail_access closed
archive.default_index by_thread
| 子参数 | 默认值 | 可选值 | 说明 |
|---|---|---|---|
archive.web_access | (列表 scenario 默认) | open / closed / owner / listmaster | Web 归档访问控制 |
archive.mail_access | (列表 scenario 默认) | 同上 | 邮件归档命令(GET 归档)访问控制 |
archive.default_index | by_thread | by_thread / by_date | Web 归档首页排序方式 |
archive_crypted_msg | (列表默认) | on / off | 是否归档加密/Signed 消息的密文 |
archive_default_index | by_thread | 同上 | 站点默认值 |
arc_private_key_path | 无 | 路径 | ARC seal 私钥 |
arc_signer_domain | 无 | 域名 | ARC 签名域 |
Bounce(退信处理)
| 参数 | 默认值 | 说明 |
|---|---|---|
bounce_delay | 2h | 退信处理延迟,给临时故障留缓冲 |
bounce_halt_rate | 10% | 单列表退信率超过此比例暂停投递 |
bounce_warn_rate | 5% | 单列表退信率超过此比例发运维告警 |
bouncers_level1 / bouncers_level2 | (列表 scenario 默认) | 退信分级判定阈值 |
minimum_bouncing_count | 无 | 超过此次数才标记订阅者失效 |
minimum_bouncing_period | 无 | 在此周期内累计才触发 |
周期任务(tasks)
Sympa 自带大量内建周期任务(/etc/sympa/tasks/),以下几个参数控制调度频率。
| 参数 | 默认值 | 说明 |
|---|---|---|
expire_task | monthly | 订阅过期检查频率 |
remind_task | monthly | 即将过期订阅者提醒频率 |
default_max_list_members | 同 max_list_members 默认 | 列表创建时 max_list_members 初始值 |
default_bounce_level1_rate / level2_rate | 内置值 | 新建列表的退信阈值默认值 |
3.8 Web / SOAP / 安全(web + soap + security)
| 参数 | 默认值 | context | 说明 |
|---|---|---|---|
wwsympa_url | 无 | site/domain | Web 面必配,WWSympa 管理界面完整 URL |
wwsympa_url_local | 自动 | site | FastCGI 进程内本地回调 URL(自动推导,无需改) |
soap_url | 无 | site/domain | SOAP API 完整 URL |
soap_url_local | 自动 | site | SOAP 本地回调 URL |
cookie | sympa_session | site | Web 会话 Cookie 名 |
cookie_domain | 无 | site/domain | Cookie 域(跨子域单点登录用) |
cookie_expire | 0(浏览器关即过期) | site | Cookie 存活期(秒) |
cookie_refresh | 0 | site | 每次访问刷新 Cookie 存活期(秒) |
css_path / css_url | 自动 | site | 自定义 CSS 路径与 URL |
pictures_path / pictures_url | 自动 | site | 自定义图片上传目录与 URL |
static_content_path / static_content_url | 自动 | site | 静态资源路径与 URL |
dkim_feature | off | site | 开启 DKIM 签名 |
dkim_selector | sympa | site | DKIM selector |
dkim_private_key_path | 无 | site | DKIM 私钥绝对路径 |
dkim_signature_apply_on | 默认子集 | site | 对哪些出站邮件加 DKIM(mdn/standard/all) |
dmarc_protection_mode | none | site | DMARC 严格域处理(none/quarantine/reject/rewrite) |
dmarc_protection_domain_regex | 内置 regexp | site | 识别 DMARC 严格域的 regexp |
四、列表 config 专属参数(list 层级)
建列表时自动生成,全部在 /var/lib/sympa/list_data/<list>@<domain>/config。高频:
| 参数 | 默认值 | 说明 |
|---|---|---|
subject | 无(必填) | 列表主题,LISTS 命令返回 |
visibility | conceal | 见 3.1 表 |
topics | 无 | 话题分类(逗号分隔),公共列表页按此筛选 |
lang | en-US | 列表语言 |
send / subscribe / unsubscribe / review / info / add / del | 内置 scenario | 每个动作对应的 scenario 规则文件名,sympa 默认提供 70+ scenario(见源码 default/scenari/) |
subscribe.* | — | subscribe paragraph:subscribe.open / subscribe.closed / subscribe.auth / subscribe.open_notify |
send.* | — | send paragraph:send.public / send.private / send.privateorpublickey / send.newsletter 等 |
review.* | — | review paragraph:review.open / review.closed / review.owner 等 |
arc_feature | on(discussion_list)/ off(其他模板) | 内建归档开关 |
💡 scenario 授权语言:Sympa 特色 DSL——send/subscribe/review 等每个动作都有独立 scenario 文件,按「认证方式 + 角色 + 规则」组合判定放行/拒绝/转审批。新建列表选模板(discussion_list/news_letter/confidential/private_working_group 等)即预置一整套 scenario,生产定制直接改
config里的send/subscribe等段引用不同 scenario 文件名,无需改代码。
五、废弃参数与版本语法
5.1 6.2.70 起 compound 参数 . 分隔
旧语法(缩进)自动兼容,新部署建议直接用点号:
# 旧
archive
web_access open
# 新(等价)
archive.web_access open
5.2 废弃参数(6.2.70+)
| 废弃 | 替代 | 说明 |
|---|---|---|
update | 用 scenario 的 set 操作 | config 文件内的 update 段已无意义 |
shared_doc paragraph | shared_feature + list 共享文档 Web 管理页 | 手动写文件路径的方式废弃 |
legacy_character_support | legacy_character_support_feature | 6.2.60+ 改名加 _feature 后缀 |
lock_method | 自动 | 旧 NFS 锁选项,现在自动检测 |
mhonarc | 内建归档器 | 6.2.37 起 archive.pl 取代 MHonArc |
5.3 同名多义参数(兼容别名)
Sympa 保留了三对因历史原因并存的别名,行为完全一致:
| 别名 1 | 别名 2 | 说明 |
|---|---|---|
forced_reply-to | forced_reply_to / forced_replyto | config 层参数,三个都能识别 |
custom-header | custom_header | config 层参数 |
custom-subject | custom_subject | config 层参数 |
sender_headers | sender_headers | 仅此一种 |
六、FAQ
- 改了 sympa.conf 要不要重启? 要。
systemctl restart sympa.service,列表 config 改动需要sympa reload_list_config或重启 sympa_msg.pl 刷新 config.bin 缓存。 - robot.conf 放哪?
/etc/sympa/sympa/<domain>/robot.conf(domain 即虚拟域全限定名),多域场景每域一个。 - 改 list config 后生效时间? sympa_msg.pl 轮询 config.bin,默认几秒内;reload_list_config 立即刷新。
- sendmail_aliases 改成 none 会怎样? Sympa 不再管理别名,MTA 侧别名需手工维护;适合 alias_manager 走 LDAP/SQL 外部数据源的场景。
- db_timeout 为啥配了没反应? 当前仅 SQLite 实现了超时,MySQL/PG 由驱动层控制;6.2.80 没实现应用层超时。
- dkim_feature on 了但出站邮件没 DKIM 头? 先检查
dkim_private_key_path指向的私钥文件是否可读(sympa 用户),再看dkim_signature_apply_on是否包含standard(默认可能只对 MDN 加签)。
七、参考链接
- sympa.conf.in 官方模板(Debian 包内):
/etc/sympa/sympa/sympa.conf(安装后) - sympa_config(5) man page 在线版:https://www.sympa.community/gpldoc/man/sympa_config.5.html(本文主要来源)
- 源码 Schema.pm(参数定义本体):
/opt/data/quzuo/tmp/sympa/src/src/lib/Sympa/Config/Schema.pm - params_all.txt(6.2.80 全量参数名采集,388 个):
/opt/data/quzuo/tmp/sympa/params_all.txt - B1 安装指南(别名权限坑、Postfix 双 map 实测):《Sympa 6.2.66 Ubuntu 22.04 安装指南》
- B2 Compose 部署(entrypoint 里 sendmail_aliases 注入):《Sympa 6.2.66 Docker Compose 部署指南》
- 选型篇(scenario 授权语言、进程族架构):《Sympa 6.2.80 介绍与选型指南》