Dada Mail 11.22.0 配置参数详解
基于实测环境详解 Dada Mail 11.22.0 三层配置体系:.dada_config 全局参数逐项语义、Config.pm 关键默认值清单、dada_settings 列表级配置、调度与日志三件套实录、配置变更生效方式与常见配置问题。
Dada Mail 11.22.0 配置参数详解
目标:以实测环境(Ubuntu 22.04 + Dada Mail 11.22.0,程序目录
/usr/lib/cgi-bin/dada,数据目录/var/lib/dadamail/.dada_files)为基准,讲清三层配置体系、全局配置文件.dada_config的参数语义与实测值、程序默认层Config.pm的关键默认值清单、列表级配置与日志体系,并给出配置变更的生效方式。安装过程参见 《Ubuntu 22.04 安装 Dada Mail 11.22.0 指南》,产品背景参见 《Dada Mail 11.22.0 介绍与选型指南》。
一、配置体系总览
Dada Mail 的配置分三层,作用域与优先级如下(优先级自下而上递增):
| 层级 | 位置 | 物理形态 | 作用域 | 修改方式 |
|---|---|---|---|---|
| 默认层 | 程序目录 DADA/Config.pm | Perl 源文件(实测 2103 行) | 全局默认值 | 升级会被覆盖,不建议改 |
| 全局层 | 数据目录 .configs/.dada_config | Perl 源文件(实测 682 行) | 全局覆盖 | 编辑文件,保存即生效 |
| 列表层 | 数据库 dada_settings 表 | 键值记录 | 单个列表 | 管理端 Web 界面 |
覆盖机制(源码级实测):Config.pm 对默认值统一使用 Perl 的 //= 运算符——"仅在变量未定义时赋值"。程序启动时先加载 Config.pm 的默认值,随后加载 .dada_config,凡在该文件中显式赋值的变量即为已定义,默认值不再生效。列表级配置存于数据库,读取时最终覆盖。
实测对照例:Config.pm 中 $SCHEDULED_JOBS_OPTIONS 默认 log => 0(不记录调度日志);.dada_config 中实测覆盖为 log => 1 后,.logs/cronjob_output.txt 立即开始记录调度输出(样例见第五节)——两层行为差异可交叉验证覆盖机制。
二、.dada_config:全局配置文件
2.1 文件定位与生成
- 生成方式:由 Web 安装向导自动写出,路径实测为
/var/lib/dadamail/.dada_files/.configs/.dada_config; - 定位机制:程序目录内的
Config.pm第 25 行实测为$PROGRAM_CONFIG_FILE_DIR = '/var/lib/dadamail/.dada_files/.configs',即程序按此路径查找外部配置——该行本身也是向导对Config.pm的少量注入点之一; - 安全属性:文件包含数据库口令,实测目录归属
www-data,应确保 Web 目录之外不可读; - 生效方式:CGI 模式下无常驻进程,每次请求都会重新加载配置,保存文件后无需重启任何服务。
2.2 基础路径与 URL
向导生成文件中的实测头部(照实摘录):
$DIR = '/var/lib/dadamail/.dada_files';
$PROGRAM_URL = 'http://10.89.70.2:8146/cgi-bin/dada/mail.cgi';
$S_PROGRAM_URL = 'http://10.89.70.2:8146/cgi-bin/dada/mail.cgi';
$RUNNING_UNDER = 'CGI';
| 参数 | 语义 | 实测要点 |
|---|---|---|
$DIR | 数据目录根 | .lists、.logs、.archives、.configs 等全部挂在其下 |
$PROGRAM_URL | 程序唯一入口的完整 URL | 换域名/端口/协议后必须同步修改,否则管理端所有跳转链接失准 |
$S_PROGRAM_URL | 安全 URL(未配 SSL 时与上同值) | 若后续启用 HTTPS,两个变量都要改 |
$RUNNING_UNDER | 运行模式声明 | 实测 CGI;程序另支持 FastCGI/PSGI |
$SUPPORT_FILES | 静态资源目录与 URL | 实测 dir => '/var/www/html/dada_mail_support_files',含 CKEditor、TinyMCE、RichFilemanager 前端组件 |
2.3 数据库配置
实测文件中的数据库段(照实摘录):
$BACKEND_DB_TYPE = 'SQL';
%SQL_PARAMS = (
dbserver => 'localhost',
database => 'dadamail',
port => '3306',
dbtype => 'mysql',
user => 'dadamail',
pass => 'q1w2e3r4',
);
| 参数 | 语义 | 说明 |
|---|---|---|
$BACKEND_DB_TYPE | 后端存储类型 | 实测 SQL;免费版实际可选 SQLite,生产建议 MySQL/PostgreSQL |
%SQL_PARAMS | 连接四要素 + 类型 | dbtype 取 mysql/Pg/SQLite;dbserver 可为 localhost 或远端地址 |
$DBI_PARAMS | DBI 连接属性(默认层) | Config.pm 实测默认含 mysql_auto_reconnect => 1、mysql_enable_utf8 => 1,一般无需覆盖 |
实测提示:改库密码后需同步更新
%SQL_PARAMS中的pass,管理端所有页面会立即报数据库连接错误,可作为改动生效的即时信号。
2.4 调度配置
实测文件第 114 行起(照实摘录):
$SCHEDULED_JOBS_OPTIONS = {
scheduled_jobs_flavor => '_schedules',
log => 1,
run_at_teardown => 1,
};
| 子键 | 语义 | 实测对照 |
|---|---|---|
scheduled_jobs_flavor | 调度入口的 flavor 名 | 默认即 _schedules,与 cron 触发的 URL 片段一致 |
log | 是否记录调度输出 | 默认层为 0;覆盖为 1 后 .logs/cronjob_output.txt 开始记录(见第五节实录) |
run_at_teardown | 请求收尾时是否顺带执行到期任务 | 默认 1,即除 cron 外,页面请求收尾也会触发调度检查 |
enabled | 调度总开关 | Config.pm 中默认注释掉(等价开启) |
2.5 编辑器与文件管理器
实测文件中还有两组前端组件配置:$WYSIWYG_EDITOR_OPTIONS(ckeditor/tiny_mce,均指向 $SUPPORT_FILES 下对应目录,实测均为 enabled => 1)与 $FILE_BROWSER_OPTIONS(rich_filemanager,含上传目录 upload_dir => '/var/www/html/dada_mail_support_files/file_uploads' 与会话目录)。写邮件时所见即所得编辑器不可用,优先检查这两个 URL 是否能直接访问。
三、Config.pm:程序默认层
定位:程序目录 DADA/Config.pm(实测 $VER = 'v11.22.0 stable 2023-09-18'),保存全部内置默认值。升级会整体覆盖该文件,因此个性化配置一律放 .dada_config。以下为实测从 Config.pm 中摘出的关键默认值(grep '//=' 照实摘录):
| 变量 | 默认值(实测) | 行号 | 说明 |
|---|---|---|---|
$MAILPROG | '/usr/sbin/sendmail' | 416 | 发信程序路径 |
$MAIL_SETTINGS | "|$MAILPROG -t" | 417 | 单发管道(sendmail -t) |
$MASS_MAIL_SETTINGS | "|$MAILPROG -t" | 418 | 群发管道;接外部 SMTP 时改这里 |
$PROGRAM_USAGE_LOG | $LOGS . '/dada.txt' | 85 | 用量/群发日志 |
$ALLOW_ROOT_LOGIN | 1 | 483 | 允许用 Root Password 登录任意列表管理端 |
$ENFORCE_CLOSED_LOOP_OPT_IN | 0 | 646 | 是否强制闭环确认订阅(默认关闭,可按列表开启) |
$LIST_QUOTA | 3 | 1072 | 列表数配额——免费版"3 个列表"的代码级实证 |
$SUBSCRIPTION_QUOTA | 100 | 1073 | 单列表订户配额——"100 订户"限制的代码级实证 |
$MAILOUT_AT_ONCE_LIMIT | 1 | 1074 | 同时进行的群发任务数上限 |
$MAILOUT_STALE_AFTER | 86400 | 1075 | 群发任务停滞多少秒后视为过期(秒,默认一天) |
$ENABLE_CSRF_PROTECTION | 1 | 1787 | 管理端 CSRF 防护(默认开启,脚本化操作需带令牌) |
$PROGRAM_ERROR_LOG | $LOGS . '/errors.txt' | 50/2021 | 错误日志;STDERR 被重定向到此文件 |
两点解读:
- 免费版限制在代码层可复现:
$LIST_QUOTA //= 3、$SUBSCRIPTION_QUOTA //= 100与官网购买页口径(3 列表 × 100 订户)一致,互为印证; - 群发速率的第一道闸:
$MAILOUT_AT_ONCE_LIMIT // = 1意味着同一时刻只跑一个群发任务,实测群发日志显示投递速度约 450 封/小时(见第五节),大规模列表需要外部投递方案(详见第七节配置建议)。
四、列表级配置(dada_settings 表)
每个列表的展示与行为配置存于 dada_settings 表(键值结构),实测样例(SELECT setting, LEFT(value, 80) ... LIMIT 8 照实摘录,密码列已脱敏说明):
| setting | value(实测样例) | 说明 |
|---|---|---|
list | devops | 列表短名(URL 标识) |
list_name | DevOps Weekly | 显示名 |
list_owner_email | admin@example.com | 列表所有者 |
info | DevOps weekly digest for the platform team. | 列表简介 |
physical_address | 1 Lab Road, Lab City, 100000 | 邮件页脚必需的物理地址(合规项) |
privacy_policy | We only email you the weekly digest; unsubscribe anytime. | 隐私政策文案 |
password | GbyI7VeIGkwt2 | 列表密码(存储为哈希,非明文) |
admin_menu | NAV-Mass Mailing=1;SUBNAV-drafts=1;... | 该列表管理端菜单布局 |
修改方式:全部通过管理端 Web 界面完成(mail.cgi?flavor=change_info、flavor=list_options 等),不直接改表;admin_menu 等由界面自动维护。与配置相关的库表还有 21 张 dada_* 表中的 dada_profiles(订户档案字段)、dada_privacy_policies(同意条款)等,完整表清单见安装指南。
五、调度与定时任务配置(实测)
机制:定时群发与后台任务依赖两件套——cron 每 5 分钟触发 _schedules 入口(安装时写入 www-data crontab,实测回显见安装指南 4.9 节),加上 run_at_teardown => 1 让每次页面请求收尾时顺带检查到期任务。
开启调度日志(log => 1)后的实测输出,.logs/cronjob_output.txt 照实摘录:
Started: Wed Oct 28 11:41:18 2026 UTC
PID: 8674
Running as uid:, www-data
Running as dedicated schedule.
Monitor:
------------------------------------------------------------------------
Server Time: Wed Oct 28 11:41:18 2026
Total Mass Mailings: 0, Active Mass Mailings: 0, Paused Mass Mailings: 0, Queued Mass Mailings: 0, Inactive Mass Mailings: 0
List: devops
*No current mailouts for devops
Mass Mailing Schedules:
------------------------------------------------------------------------
Running Schedules for, DevOps Weekly (devops)
------------------------------------------------------------------------
Current Server Time: Wed Oct 28 11:41:18 2026 UTC
Scheduled Mass Mailings Last Ran: Wed Oct 28 11:40:01 2026 UTC (1 minute, 17 seconds ago)
群发全程日志,.logs/dada.txt 照实摘录(同一封消息的 Starting/Completed 对):
[Wed Oct 28 11:39:28 2026] devops 127.0.0.0 Mass Mailing Starting Message-Id: <20261028113928.17927585@example.com> Subject: DevOps Weekly #1 - Hello from the Lab Started: Wed Oct 28 11:39:28 2026 Mailing Amount: 2
[Wed Oct 28 11:39:44 2026] devops 127.0.0.0 Mass Mailing Completed Message-Id: <20261028113928.17927585@example.com> Subject: DevOps Weekly #1 - Hello from the Lab Started: Wed Oct 28 11:39:28 2026 Finished: Wed Oct 28 11:39:44 2026 Total Sending Time: 16 seconds Mailing Amount: 2 Mailing Speed: 450.00 messages/hour
该日志可直接用于容量估算:实测默认 sendmail 本地投递下 2 封耗时 16 秒、折算 450 封/小时,群发吞吐受限于每次请求的投递窗口与 $MAILOUT_AT_ONCE_LIMIT。
六、日志体系
.logs 目录实测三件套:
| 文件 | 写入方 | 内容与用途 |
|---|---|---|
dada.txt | 程序用量日志($PROGRAM_USAGE_LOG) | 登录、订阅动作、群发 Starting/Completed,排群发问题第一入口 |
errors.txt | STDERR 重定向($PROGRAM_ERROR_LOG) | Perl 告警与异常;Apache error.log 报 CGI 错误时先看这里 |
cronjob_output.txt | 调度器(log => 1 时) | _schedules 每次运行的监视输出 |
errors.txt 实测样例(照实摘录):
Can't locate Image/Scale.pm in @INC (you may need to install the Image::Scale module) (@INC contains... at DADA/App/ResizeImages.pm line 45.
Can't locate Image/Resize.pm in @INC (you may need to install the Image::Resize module) (@INC contai... at DADA/App/ResizeImages.pm line 68.
Can't locate Image/Magick.pm in @INC (you may need to install the Image::Magick module) (@INC contai... at DADA/App/ResizeImages.pm line 96.
即富文本编辑器中上传大图时,自动缩图功能会尝试 Image::Scale/Image::Resize/Image::Magick 三个可选 Perl 模块;缺失仅导致图片不缩放(消息照发),需要该功能时用 cpanm 安装其一即可。
七、配置变更与生效方式
- 全局层:直接编辑
.dada_config保存即生效(CGI 每请求重读),无需重启 Apache 或数据库; - 改 URL 的标准动作:
$PROGRAM_URL/$S_PROGRAM_URL/$SUPPORT_FILES{url}三处同步改,并核对浏览器中管理端链接是否指向新地址; - 列表层:管理端界面修改,立即写库生效;
- 备份与恢复:管理端内置配置备份功能;
.backups目录挂在其下。数据库侧用mysqldump快照——实测"备份 → 删表 → 回灌恢复"回环完整可用(操作步骤见 《Ubuntu 22.04 安装 Dada Mail 11.22.0 指南》第九节),升级或批量改配置前建议同时做文件与数据库两份快照; - 排错入口:配置改错导致页面白屏/报错时,按
errors.txt→ Apacheerror.log的顺序定位;改坏.dada_config的 Perl 语法会让所有页面直接 500,恢复备份文件即可。
八、常见配置问题(实测沉淀)
- 换了域名/端口后管理端还能打开但跳转错误:只改了
$PROGRAM_URL忘了$S_PROGRAM_URL(或反之),两个变量必须同值同步; - cron 明明在跑,定时任务不执行:优先检查
.dada_config中scheduled_jobs_flavor是否仍是_schedules(与 cron URL 一致),再把log打开为1观察cronjob_output.txt中 Monitor 段的群发计数是否变化; - 看不到调度日志:
Config.pm默认log => 0,需在.dada_config中显式覆盖为1; - 脚本化调用管理端被拒:
$ENABLE_CSRF_PROTECTION默认开启,POST 需携带会话 cookie 中的_csrf_token,且该值是 URL 编码形态(形如hmac%20...),回传字段时需先 URL 解码——实测群发脚本化时最易踩的一坑; - 图片自动缩放不生效:
.logs/errors.txt出现Can't locate Image/...(见第六节),属可选依赖缺失,不影响发送主流程。
九、参考链接
- 本专栏:《Dada Mail 11.22.0 介绍与选型指南》、《Ubuntu 22.04 安装 Dada Mail 11.22.0 指南》;
- 全局配置变量官方手册:https://dadamailproject.com/d/global_variables.pod.html (查询日期 2026-10-28);
- 官方安装文档:https://dadamailproject.com/d/install_dada_mail.pod.html (查询日期 2026-10-28)。