Dada Mail 常用 CLI 命令详解
Dada Mail 11.22.0 命令行实操:mail.cgi 自检调用、subscribe_email.pl 订阅脚本、官方迁移备份脚本、_schedules 调度入口、mysqldump 删表恢复回环与日志排查,含未实测项清单。
Dada Mail 常用 CLI 命令详解
基于 Dada Mail v11.22.0 在 Ubuntu 22.04 实测(2026-10-28)。Dada Mail 的"命令行"由四类构成:mail.cgi 本体调用、官方维护/迁移脚本(
extras/scripts/)、cron 调度 URL、以及围绕 SQL 与文件目录的备份恢复操作。文中环境与《Dada Mail Ubuntu 22.04 安装部署指南》一致:程序目录/usr/lib/cgi-bin/dada,数据目录/var/lib/dadamail/.dada_files,示例列表devops。
一、mail.cgi 本体的命令行调用
mail.cgi 是标准 CGI 程序,直接以 perl 运行会输出完整 HTTP 响应(不进 Web 服务器)。实测:
cd /usr/lib/cgi-bin/dada && perl ./mail.cgi | head -7
实测回显(照抄):
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Date: Wed, 28 Oct 2026 04:45:21 GMT
Cache-control: max-age=0, no-cache, no-store, must-revalidate
Pragma: no-cache
Content-Type: text/html; charset=UTF-8
<!doctype html>
可用来做程序健康自检:能打出这组头即说明 Perl 环境、Config 加载、模块链路全部正常。
二、官方维护与迁移脚本(extras/scripts/)
发行包自带脚本清单(实测 ls):
dada3_to_dada4_sql.pl dada_archives_backup_to_sql.pl dada_archives_db_to_sql.pl
dada_clickthrough_plaintext_to_sql.pl dada_settings_backup_to_sql.pl
dada_settings_db_to_sql.pl dada_subscribers_plaintext_to_sql.pl
subscribe tracker_add_missing_num_subs.cgi webservices
2.1 CLI 订阅:subscribe/subscribe_email.pl
参数(源码 GetOptions 定义):--email 收件地址、--list 列表短名、--fields "key=value" 自定义档案字段、--verbose 打印结果。
正常订阅:
cd /usr/lib/cgi-bin/dada
perl extras/scripts/subscribe/subscribe_email.pl \
--email 'alice@example.com' --list devops --verbose
实测回显(照抄):
Email: alice@example.com
List: devops
Fields:
$VAR1 = {
'errors' => {},
'status' => 1
};
status => 1 即成功。入库验证(实测):
# mysql dadamail -e 'SELECT email,list FROM dada_subscribers;'
email list
alice@example.com devops
带档案字段批量订阅:
perl extras/scripts/subscribe/subscribe_email.pl \
--email 'bob@example.com' --list devops --fields 'name=Bob'
实测回显(verbose 关闭时无输出,静默成功):
Email: bob@example.com
List: devops
Fields:
$VAR1 = {
'errors' => {},
'status' => 1
};
失败分支:对不存在的列表运行(--list nosuchlist),脚本静默退出、无输出、退出码 0;加 --verbose 才会打印包含 invalid_list => 1 的诊断结构。运维上建议封装时统一带 --verbose 并解析 status 字段。
2.2 备份→SQL 迁移脚本
把老式文件存储(.backup 文件)中的设置/归档迁移进 SQL:
cd /usr/lib/cgi-bin/dada
perl extras/scripts/dada_settings_backup_to_sql.pl
实测回显(照抄):
Content-Type: text/html; charset=ISO-8859-1
<pre>beginning...
Done.
perl extras/scripts/dada_archives_backup_to_sql.pl
实测回显:
Content-Type: text/html; charset=ISO-8859-1
<pre>beginning...
Done.
两个脚本对全新安装(无历史 .backup 文件)会直接 beginning... Done. 空跑一遍,可安全执行。
2.3 其余脚本速查
| 脚本 | 用途 |
|---|---|
dada3_to_dada4_sql.pl | Dada 3 老版数据升 4+ SQL 结构 |
dada_settings_db_to_sql.pl / dada_archives_db_to_sql.pl | 跨 SQL 后端搬迁(库到库) |
dada_subscribers_plaintext_to_sql.pl | 明文订户文件导入 SQL |
dada_clickthrough_plaintext_to_sql.pl | 点击日志明文→SQL |
tracker_add_missing_num_subs.cgi | Tracker 统计补偿 |
webservices/ | 第三方语言(PHP/Perl)调用样例 |
以上迁移类脚本除 2.2 两个外未逐一实测,用法以脚本头注释与官方文档为准。
三、cron 调度入口(_schedules URL)
官方唯一的后台任务驱动入口,覆盖 Mailing Monitor、定时群发、Bounce Handler、Bridge:
http://<主机>:8150/cgi-bin/dada/mail.cgi/_schedules/_all/_all/_silent/
URL 四段参数为:_schedules(flavor)/ _all(列表范围)/ _all(任务范围)/ _silent(静默模式)。
实测触发:
# curl -s -o /dev/null -w '%{http_code}\n' \
'http://localhost:8150/cgi-bin/dada/mail.cgi/_schedules/_all/_all/_silent/'
200
配合 .dada_config 中 $SCHEDULED_JOBS_OPTIONS 的 log => 1(见配置篇生效实录),每次触发都会在 .logs/cronjob_output.txt 落一条运行记录(实测内容):
Started: Wed Oct 28 05:00:53 2026 UTC
PID: 8933
Running as uid:, www-data
Running as dedicated schedule.
crontab 生产写法(每 5 分钟,www-data 身份):
*/5 * * * * /bin/curl --user-agent "Mozilla/5.0 (compatible;)" --silent --get --url "http://localhost:8150/cgi-bin/dada/mail.cgi/_schedules/_all/_all/_silent/" > /dev/null
四、日志查看命令
运行日志全部位于 .dada_files/.logs/(实测目录内容:dada.txt、errors.txt、cronjob_output.txt):
tail -f /var/lib/dadamail/.dada_files/.logs/dada.txt # 订阅/退订/列表操作审计
tail -f /var/lib/dadamail/.dada_files/.logs/errors.txt # 程序错误
dada.txt 实测样例(照抄,创建列表时落的一条审计):
[Wed Oct 28 04:51:41 2026] devops 127.0.0.0 List Created remote_host:,ip_address:127.0.0.1
errors.txt 实测样例(探测无效 flavor 时产生,可佐证排障):
unknown param called: "list_viewer" REMOTE HOST: REMOTE_ADDR: 127.0.0.1 at /usr/lib/cgi-bin/dada/DADA/App.pm line 651, <CONFIG> line 1.
五、备份与恢复实测
5.1 备份策略概览
| 对象 | 备份物 | 命令 |
|---|---|---|
| SQL 数据(订户/设置/归档等 21 张表) | mysqldump 转储 | mysqldump dadamail |
| 全局配置 | .configs/.dada_config | cp |
| 日志/模板/临时文件 | .dada_files 其余目录 | tar |
5.2 mysqldump 备份实测
mkdir -p /var/backups/dadamail
mysqldump dadamail > /var/backups/dadamail/dadamail-$(date +%F).sql
ls -lh /var/backups/dadamail/
实测回显:
total 28K
-rw-r--r-- 1 root root 25K Oct 28 04:54 dadamail-2026-10-28.sql
5.3 删表→恢复回环实测
模拟灾难(删除订户表)后用备份恢复:
mysql dadamail -e 'DROP TABLE dada_subscribers;'
mysql dadamail < /var/backups/dadamail/dadamail-2026-10-28.sql
mysql dadamail -e 'SELECT email,list FROM dada_subscribers;'
恢复后实测回显:
email list
alice@example.com devops
bob@example.com devops
数据完整回环,恢复即"导入转储文件"一步。
5.4 .dada_files 打包备份
tar czf /var/backups/dadamail/dadafiles-$(date +%F).tar.gz \
-C /var/lib/dadamail .dada_files
恢复时解回原位并保持属主为运行用户(www-data):
tar xzf dadafiles-2026-10-28.tar.gz -C /var/lib/dadamail
chown -R www-data:www-data /var/lib/dadamail/.dada_files
六、订户数据的直接查询与导出
排查层面可直接查库(实测):
# mysql dadamail -e 'SELECT email,list FROM dada_subscribers;'
# mysql dadamail -e 'SELECT COUNT(*) FROM dada_subscribers;'
面向运营的订户导出(CSV)走管理端:登录列表控制面板 → Members(View List)→ 右上角 Export,按向导选择字段导出 CSV;导入用同页 Import(支持 CSV 上传与"字段-列"映射)。此链路属管理端图形操作,本文未做逐帧截图级实测,操作路径以官方文档《Dada Mail Members/View List》为准;应急场景可用 5.3 的 SQL 方式等价替代。
七、发信链路的命令行验证
Dada Mail 默认经 sendmail 兼容命令发信($MAILPROG = '/usr/sbin/sendmail')。验证底层通道连通性(与 Dada Mail 无关、纯系统级):
printf 'Subject: sendmail-test\nTo: root@localhost\n\nhello from sendmail\n' | sendmail root@localhost
cat /var/mail/root | head -5
实测回显(本地 Postfix 投递成功):
From root@dadamail-lab Wed Oct 28 04:52:52 2026
Return-Path: <root@dadamail-lab>
X-Original-To: root@localhost
Delivered-To: root@localhost
Received: by dadamail-lab (Postfix, from userid 0)
从 Dada Mail 管理端发起群发/测试信后,可用 mailq 观察队列、.logs/dada.txt 观察发送审计。管理端群发的完整表单流程(Send a Message → 确认 → 队列发送)属图形操作,本文未实测到投递回执级别;预期行为以官方文档《Sending Messages》为准:消息入队后由 Mailing Monitor(即 _schedules 调度)分批投递。
八、未实测项清单
| 项 | 原因 | 建议 |
|---|---|---|
| 管理端群发全流程投递回执 | 表单链路图形化操作,未逐帧实测 | 依据官方文档操作,配合 mailq 与日志观察 |
| View List CSV 导出/导入 | 管理端图形链路 | 按 Members 页面向导执行 |
| Bounce Handler / Bridge 的 POP 收信 | 需要可收信的真实邮箱 | 配置 POP 后由 cron 调度自动拉取 |
dada3_to_dada4_sql.pl 等迁移脚本 | 无老版本数据源 | 迁移前在测试环境演练 |
| Bundle::DadaMailXXL 全量安装 | 需要较长时间编译 | 官方完成页建议执行 |
相关文档
- 安装与环境准备:《Dada Mail Ubuntu 22.04 安装部署指南》
- 配置与日志开关:《Dada Mail 配置参数详解》
- 项目定位与选型:《Dada Mail 介绍与选型指南》