Dada Mail 11.22.0 配置参数详解

基于实测环境详解 Dada Mail 11.22.0 三层配置体系:.dada_config 全局参数逐项语义、Config.pm 关键默认值清单、dada_settings 列表级配置、调度与日志三件套实录、配置变更生效方式与常见配置问题。

DadaMail邮件Perl 语言2026/10/28

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.pmPerl 源文件(实测 2103 行)全局默认值升级会被覆盖,不建议改
全局层数据目录 .configs/.dada_configPerl 源文件(实测 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_PARAMSDBI 连接属性(默认层)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_LOGIN1483允许用 Root Password 登录任意列表管理端
$ENFORCE_CLOSED_LOOP_OPT_IN0646是否强制闭环确认订阅(默认关闭,可按列表开启)
$LIST_QUOTA31072列表数配额——免费版"3 个列表"的代码级实证
$SUBSCRIPTION_QUOTA1001073单列表订户配额——"100 订户"限制的代码级实证
$MAILOUT_AT_ONCE_LIMIT11074同时进行的群发任务数上限
$MAILOUT_STALE_AFTER864001075群发任务停滞多少秒后视为过期(秒,默认一天)
$ENABLE_CSRF_PROTECTION11787管理端 CSRF 防护(默认开启,脚本化操作需带令牌)
$PROGRAM_ERROR_LOG$LOGS . '/errors.txt'50/2021错误日志;STDERR 被重定向到此文件

两点解读:

  1. 免费版限制在代码层可复现:$LIST_QUOTA //= 3、$SUBSCRIPTION_QUOTA //= 100 与官网购买页口径(3 列表 × 100 订户)一致,互为印证;
  2. 群发速率的第一道闸:$MAILOUT_AT_ONCE_LIMIT // = 1 意味着同一时刻只跑一个群发任务,实测群发日志显示投递速度约 450 封/小时(见第五节),大规模列表需要外部投递方案(详见第七节配置建议)。

四、列表级配置(dada_settings 表)

每个列表的展示与行为配置存于 dada_settings 表(键值结构),实测样例(SELECT setting, LEFT(value, 80) ... LIMIT 8 照实摘录,密码列已脱敏说明):

settingvalue(实测样例)说明
listdevops列表短名(URL 标识)
list_nameDevOps Weekly显示名
list_owner_emailadmin@example.com列表所有者
infoDevOps weekly digest for the platform team.列表简介
physical_address1 Lab Road, Lab City, 100000邮件页脚必需的物理地址(合规项)
privacy_policyWe only email you the weekly digest; unsubscribe anytime.隐私政策文案
passwordGbyI7VeIGkwt2列表密码(存储为哈希,非明文)
admin_menuNAV-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.txtSTDERR 重定向($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 安装其一即可。

七、配置变更与生效方式

  1. 全局层:直接编辑 .dada_config 保存即生效(CGI 每请求重读),无需重启 Apache 或数据库;
  2. 改 URL 的标准动作:$PROGRAM_URL/$S_PROGRAM_URL/$SUPPORT_FILES{url} 三处同步改,并核对浏览器中管理端链接是否指向新地址;
  3. 列表层:管理端界面修改,立即写库生效;
  4. 备份与恢复:管理端内置配置备份功能;.backups 目录挂在其下。数据库侧用 mysqldump 快照——实测"备份 → 删表 → 回灌恢复"回环完整可用(操作步骤见 《Ubuntu 22.04 安装 Dada Mail 11.22.0 指南》第九节),升级或批量改配置前建议同时做文件与数据库两份快照;
  5. 排错入口:配置改错导致页面白屏/报错时,按 errors.txt → Apache error.log 的顺序定位;改坏 .dada_config 的 Perl 语法会让所有页面直接 500,恢复备份文件即可。

八、常见配置问题(实测沉淀)

  1. 换了域名/端口后管理端还能打开但跳转错误:只改了 $PROGRAM_URL 忘了 $S_PROGRAM_URL(或反之),两个变量必须同值同步;
  2. cron 明明在跑,定时任务不执行:优先检查 .dada_config 中 scheduled_jobs_flavor 是否仍是 _schedules(与 cron URL 一致),再把 log 打开为 1 观察 cronjob_output.txt 中 Monitor 段的群发计数是否变化;
  3. 看不到调度日志:Config.pm 默认 log => 0,需在 .dada_config 中显式覆盖为 1;
  4. 脚本化调用管理端被拒:$ENABLE_CSRF_PROTECTION 默认开启,POST 需携带会话 cookie 中的 _csrf_token,且该值是 URL 编码形态(形如 hmac%20...),回传字段时需先 URL 解码——实测群发脚本化时最易踩的一坑;
  5. 图片自动缩放不生效:.logs/errors.txt 出现 Can't locate Image/...(见第六节),属可选依赖缺失,不影响发送主流程。

九、参考链接