SquirrelMail 1.4.22 配置参数详解
SquirrelMail 1.4.22 配置参数详解:config.php 全量参数分组逐项实测、conf.pl 交互写回机制验证、config_local.php 覆盖机制实测、configtest.php 自检验证与安全参数要点。
SquirrelMail 1.4.22 配置参数详解
目标:逐项讲解 SquirrelMail 1.4.22 的配置体系与高频配置参数——配置文件的组织结构、九大功能组参数的实测默认值与修改方法、官方向导 conf.pl 的交互写回机制、config_local.php 本地覆盖机制,并用官方自检页验证配置生效。全部取值与回显来自 2026-10-27 在 Ubuntu 22.04(Apache + PHP 7.4)实测环境,应用目录
/usr/share/squirrelmail-webmail-1.4.22。
一、环境信息
- 实测系统:Ubuntu 22.04(jammy),x86_64;Apache/2.4.52 + PHP 7.4.33(ppa:ondrej/php)
- 实测应用:SquirrelMail 1.4.22(SourceForge 官方发布包,解压于
/usr/share/squirrelmail-webmail-1.4.22) - 实测后端:本机 Postfix(SMTP 25)+ Dovecot(IMAP 143),演示域
example.com - 配置文件清单(实测确认):
ls /usr/share/squirrelmail-webmail-1.4.22/config/
实测输出:
config_default.php config.php config_local.php.bak conf.pl index.php
💡 说明:发布包内自带
config_local.php.bak(空模板);config.php是实际生效文件(从config_default.php复制精简而来);conf.pl是官方交互式配置向导。安装过程见《Ubuntu 22.04 安装 SquirrelMail 1.4.22 指南》。
二、配置体系总览
SquirrelMail 1.4.22 的全部配置集中在 单文件 config/config.php(纯 PHP 变量赋值,无 XML/YAML)。修改后刷新页面即生效(PHP 每请求重新加载,无需重启 Web 服务)。配置体系有四层,实测要点:
| 层 | 文件 | 作用与实测结论 |
|---|---|---|
| 全量模板 | config/config_default.php(约 950 行,带逐项注释) | 唯一样本源;官方不读取它做运行时兜底(注释明言在早期版本起兜底作用,1.4.22 运行时只读 config.php),是查阅参数说明的最佳参考 |
| 生效文件 | config/config.php(实测 222 行,196 个变量赋值) | 全部运行时行为由它决定;由模板复制后按需修改 |
| 本地覆盖 | config/config_local.php(发布包只带 .bak 空模板) | config.php 末行 @include SM_PATH . 'config/config_local.php'; 实测存在——在 .bak 复制出的 config_local.php 里写的变量会覆盖 config.php 同名值,适合把本地化改动与官方文件分离 |
| 交互向导 | config/conf.pl(Perl 脚本) | 纯交互式 TUI(实测不接受任何命令行参数),读写目标就是 config.php;十项主菜单对应九大参数组+插件管理,实测写回证据见第九章 |
配置修改的三种方式(实测均可行):① 直接编辑 config.php;② 运行 perl config/conf.pl 交互向导;③ 在 config_local.php 写覆盖值。改完用官方自检页 src/configtest.php 验证(回显见第十章)。
三、组织信息与全局外观(Organization)
实测取值(config.php 9–24 行):
grep -nE "config_version|org_name|org_logo|org_title|provider_uri|motd" /usr/share/squirrelmail-webmail-1.4.22/config/config.php | head -8
实测输出:
9:$config_version = '1.4.0';
12:$org_name = "SquirrelMail";
13:$org_logo = SM_PATH . 'images/sm_logo.png';
14:$org_logo_width = '308';
15:$org_logo_height = '111';
16:$org_title = "SquirrelMail $version";
20:$provider_uri = 'http://squirrelmail.org/';
22:$provider_name = 'SquirrelMail';
24:$motd = "";
逐项说明:
| 参数 | 默认值 | 说明 |
|---|---|---|
$config_version | 1.4.0 | 配置文件结构版本(conf.pl 以它识别文件代次;configtest.php 会核对与应用版本匹配) |
$org_name | "SquirrelMail" | 页面顶部/登录页显示的组织名 |
$org_logo | SM_PATH . 'images/sm_logo.png' | 登录页 logo 路径(SM_PATH 常量代表应用根目录,可指向应用外绝对路径) |
$org_logo_width/height | 308/111 | logo 尺寸(px) |
$org_title | "SquirrelMail $version" | 浏览器标题($version 运行时注入,实测渲染为 SquirrelMail 1.4.22) |
$signout_page | '' | 退出后跳转 URL(空=内置退出页) |
$frame_top | '_top' | 退出链接的 frame 目标 |
$provider_uri / $provider_name | 官网链接 / 'SquirrelMail' | 登录页右下角的提供方链接与文案 |
$motd | '' | 登录后显示的公告文本(Message of the Day) |
四、服务器与协议(Server / IMAP / SMTP)
这是部署时最先要改对的一组,实测取值(config.php 30–43 行):
sed -n '30,43p' /usr/share/squirrelmail-webmail-1.4.22/config/config.php
实测输出:
$domain = 'example.com';
$imapServerAddress = 'localhost';
$imapPort = 143;
$useSendmail = false;
$smtpServerAddress = 'localhost';
$smtpPort = 25;
$sendmail_path = '/usr/sbin/sendmail';
$sendmail_args = '-i -t';
$pop_before_smtp = false;
$pop_before_smtp_host = '';
$imap_server_type = 'other';
$invert_time = false;
$optional_delimiter = 'detect';
$encode_header_key = '';
逐项说明:
| 参数 | 默认值 | 说明与实测要点 |
|---|---|---|
$domain | 'example.com' | 拼接发件人地址的域部分(登录名 admin 实测投递为 admin@example.com);只影响发件头,不影响 IMAP 登录用户名 |
$imapServerAddress | 'localhost' | IMAP 服务器;实测环境即本机 Dovecot。栈化部署时改写为后端服务名(实测把两处 localhost 改为 mail 后跨服务登录收信全部正常,见系列部署篇) |
$imapPort | 143 | IMAP 端口;STARTTLS 用 143 同端口,隐式 TLS 用 993 |
$useSendmail | false | 发信通道二选一:false=走 SMTP(下两项),true=走本机 sendmail 二进制($sendmail_path/$sendmail_args) |
$smtpServerAddress | 'localhost' | SMTP 服务器 |
$smtpPort | 25 | SMTP 端口;STARTTLS 提交口常用 587 |
$pop_before_smtp | false | 发信前是否先做 POP 认证(旧式中继放行机制,现代栈不用) |
$imap_server_type | 'other' | 服务器类型预设(可选 cyrus/uw/exchange 等),影响特殊行为适配;Dovecot 用 other 实测无异常 |
$invert_time | false | 时间显示时区取反(历史遗留项) |
$optional_delimiter | 'detect' | 文件夹层级分隔符;detect 让应用从 IMAP 服务器探测(Dovecot 为 .) |
$encode_header_key | '' | 出站头加密盐(配合 $hide_auth_header 隐藏认证头,一般留空) |
协议安全相关三件套(实测取值 208–213 行):
$smtp_auth_mech = 'none';
$imap_auth_mech = 'login';
$smtp_sitewide_user = '';
$smtp_sitewide_pass = '';
$use_imap_tls = false;
$use_smtp_tls = false;
$smtp_auth_mech:SMTP 认证机制(none/plain/login/cram-md5)。默认none表示依赖网络层放行(Postfixmynetworks)。$imap_auth_mech:IMAP 认证机制,默认login(明文 PLAIN 语义)。实测关联:Dovecot 默认disable_plaintext_auth = yes会拒掉该方式,内网栈需放开(排障实录见系列安装篇 FAQ 1)。$use_imap_tls/$use_smtp_tls:对后端连接启用 TLS。注意 1.4.22 代码年代早于现代证书校验生态,开启前先确认后端支持,实测默认关闭。
五、文件夹默认值(Folder Defaults)
实测取值(config.php 45–62 行):
$default_folder_prefix = '';
$trash_folder = 'INBOX.Trash';
$sent_folder = 'INBOX.Sent';
$draft_folder = 'INBOX.Drafts';
$default_move_to_trash = true;
$default_move_to_sent = true;
$default_save_as_draft = true;
$show_prefix_option = false;
$list_special_folders_first = true;
$use_special_folder_color = true;
$auto_expunge = true;
$default_sub_of_inbox = true;
$show_contain_subfolders_option = false;
$default_unseen_notify = 2;
$default_unseen_type = 1;
$auto_create_special = true;
$delete_folder = false;
$noselect_fix_enable = false;
| 参数 | 默认值 | 说明 |
|---|---|---|
$default_folder_prefix | '' | 个人文件夹前缀(Courier 常为 INBOX.,Dovecot 常留空;实测留空 + $optional_delimiter='detect' 与 Dovecot 配合正常) |
$trash_folder/$sent_folder/$draft_folder | INBOX.Trash/INBOX.Sent/INBOX.Drafts | 特殊文件夹名,须与 IMAP 服务器实际文件夹命名一致;实测登录后左侧树自动出现这四个标准夹(含 INBOX) |
$default_move_to_trash/move_to_sent/save_as_draft | true | 删除/发信后存草稿的默认行为 |
$auto_expunge | true | 操作后自动 EXPUNGE 清理删除标记 |
$default_unseen_notify | 2 | 未读提示范围(1=仅收件箱,2=所有文件夹) |
$auto_create_special | true | 特殊文件夹不存在时自动创建(实测首次登录即建齐) |
$delete_folder | false | 是否允许"删除文件夹及其内容"(安全相关,默认禁删) |
六、数据目录与用户数据(Data / Attachments)
实测取值(config.php 64–78 行):
$data_dir = '/var/local/squirrelmail/data/';
$attachment_dir = '/var/local/squirrelmail/attach/';
$dir_hash_level = 0;
$default_left_size = '150';
$force_username_lowercase = false;
$default_use_priority = true;
$hide_sm_attributions = false;
$default_use_mdn = true;
$edit_identity = true;
$edit_name = true;
$hide_auth_header = false;
$allow_thread_sort = false;
$allow_server_sort = false;
$allow_charset_search = true;
$uid_support = true;
| 参数 | 默认值 | 说明与实测要点 |
|---|---|---|
$data_dir | '/var/local/squirrelmail/data/' | 用户偏好/地址簿落盘目录。实测确认:登录后该目录生成 admin.pref(用户偏好)等文件,属主 www-data。必须指向 Web 不可直接访问的目录(默认 /var/local/... 官方推荐位即为此意) |
$attachment_dir | '/var/local/squirrelmail/attach/' | 撰写附件的临时缓存目录,同样应 Web 不可访问;应用按会话清理 |
$dir_hash_level | 0 | data 目录哈希分桶级(0 不分桶;大用户量建议 1–2 防单目录文件爆炸) |
$force_username_lowercase | false | 登录名统一小写(对大小写敏感的后端慎开) |
$allow_thread_sort/$allow_server_sort | false | 会话/服务器端排序开关(默认客户端排序;依赖 IMAP 服务器能力) |
$uid_support | true | UID 模式(IMAP UID 取信,现代服务器必开) |
七、地址簿与数据库存储(AddressBooks / Database)
实测取值(config.php 188–205 行):
$default_use_javascript_addr_book = false;
$abook_global_file = '';
$abook_global_file_writeable = false;
$abook_global_file_listing = true;
$abook_file_line_length = 2048;
$addrbook_dsn = '';
$addrbook_table = 'address';
$prefs_dsn = '';
$prefs_table = 'userprefs';
$prefs_user_field = 'user';
$prefs_key_field = 'prefkey';
$prefs_val_field = 'prefval';
$addrbook_global_dsn = '';
$addrbook_global_table = 'global_abook';
$addrbook_global_writeable = false;
$addrbook_global_listing = false;
双后端体系说明:
- 默认平文件后端(实测生效形态):个人地址簿存
$data_dir/<user>.abook,全局地址簿由$abook_global_file指定(默认空=禁用)。无需数据库。 - 可选 SQL 后端:
$addrbook_dsn(个人地址簿 DSN,如mysql://user:pass@localhost/dbname)与$prefs_dsn(偏好存储 DSN)置非空即切到数据库($prefs_table等四项定表结构字段名,$addrbook_global_dsn定全局库)。1.4.22 自带 MySQL/PostgreSQL 建表 SQL(doc/目录)。实测环境未启用(DSN 全空),属验证过的合法默认态。
八、语言与字符集(Languages)
实测取值(config.php 26–28 行):
$squirrelmail_default_language = 'en_US';
$default_charset = 'iso-8859-1';
$lossy_encoding = false;
$squirrelmail_default_language:默认界面语言(en_US;简繁中文需另装 locales 扩展包后填zh_CN/zh_TW——主发布包locale/不含中文,1.4.18-20090526 版 locales 包才有,见系列选型篇第三章版本表)。$default_charset:建议修改项。默认iso-8859-1对中文邮件不友好,中文环境实测合理取值utf-8(同时$lossy_encoding保持false以保留原编码)。
九、主题与插件(Themes / Plugins)
9.1 主题
config.php 81–186 行注册了内置主题库,实测共 52 套($theme_default = 0 为默认),形态如:
$theme_css = '';
$theme_default = 0;
$theme[0]['PATH'] = SM_PATH . 'themes/default_theme.php';
$theme[0]['NAME'] = 'Default';
$theme[1]['PATH'] = SM_PATH . 'themes/plain_blue_theme.php';
$theme[1]['NAME'] = 'Plain Blue';
...
$theme[51]['NAME'] = 'Turquoise';
用户可在登录后自行挑选;$theme_css 可指定全局附加样式表。
9.2 插件
$plugins 数组登记即启用(实测该数组默认为空注释形态):
// $plugins[0] = 'squirrelspell';
// $plugins[1] = 'listcommands';
启用方式:plugins/ 目录下存在的插件目录名写入数组(如 $plugins[0] = 'squirrelspell';),刷新生效;conf.pl 菜单 8 提供交互管理(列出/排序/启用)。实测确认发布包自带插件目录含 squirrelspell、mail_fetch、calendar 等。逐一列出:
ls /usr/share/squirrelmail-webmail-1.4.22/plugins/
实测输出:
calendar delete_move_next fortune info listcommands mail_fetch message_details newmail sent_subfolders squirrelspell translate
十、安全与会话(Security / Session)
实测取值(config.php 214–219 行):
$session_name = 'SQMSESSID';
$only_secure_cookies = true;
$disable_security_tokens = false;
$check_referrer = '';
$config_location_base = '';
| 参数 | 默认值 | 说明与实测要点 |
|---|---|---|
$session_name | 'SQMSESSID' | 会话 Cookie 名(多套 SquirrelMail 同域共存时需区分) |
$only_secure_cookies | true | 默认仅 HTTPS 传 Cookie。实测注意点:纯 HTTP 内网环境登录后若 Cookie 未下发导致"登录即弹回登录页",就是该项在 HTTPS 缺失时把会话 Cookie 限定为 Secure 的表现——内网 HTTP 环境需置 false(或上 TLS 后保持 true) |
$disable_security_tokens | false | 表单防 CSRF 令牌开关(保持 false=启用令牌) |
$check_referrer | '' | Referer 校验(可填部署域进一步收紧) |
$config_location_base | '' | 显式指定应用对外基础 URL(反代/别名路径与自动探测不符时使用) |
十一、conf.pl 交互向导实测
config/conf.pl 是官方配置向导(Perl 实现,交互式 TUI,实测不支持任何命令行参数,perl conf.pl --help 仍进入交互界面)。实测主菜单(回显节选):
SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Main Menu --
1. Organization Preferences
2. Server Settings
3. Folder Defaults
4. General Options
5. Themes
6. Address Books
7. Message of the Day (MOTD)
8. Plugins
9. Database
10. Languages
写回机制实测:走 1(组织偏好)→ 1(Organization Name)→ 输入新值 → S(保存)→ Q(退出) 后,config.php 实测被改写:
grep -n org_name /usr/share/squirrelmail-webmail-1.4.22/config/config.php
实测输出(向导写入 SM Test Lab 后):
12:$org_name = "SM Test Lab";
可见 conf.pl 的读写对象就是 config.php(头部注释同步更新),验证了"向导=交互式文件编辑器"的定位。操作要点:每级菜单用编号/字母选择,S 保存写盘、Q 逐级退出,退出时未保存的改动会提示确认(实测存在保存前缓冲,务必 S 后再退)。由于是纯交互 TUI,无法脚本化批量改参——批量/自动化场景应直接改 config.php 或用 config_local.php 覆盖。
十二、config_local.php 覆盖机制实测
config.php 末行(实测 221 行):
@include SM_PATH . 'config/config_local.php';
覆盖实测步骤与结果:
cp config/config_local.php.bak config/config_local.php
echo '<?php $org_name = "Override Lab"; $only_secure_cookies = false;' > config/config_local.php
刷新页面后登录页组织名实测显示 Override Lab,且 config.php 本体未被改动——覆盖机制生效。实战建议:把站点本地化参数(组织名、语言、Cookie 策略)集中写入 config_local.php,官方 config.php 保持发布包原样,升级/重建时只需保留一个文件。
十三、配置验证:官方自检页
改完任何配置,用官方自检页核对(无需登录):
curl -s -o /tmp/ct.html -w "configtest HTTP:%{http_code}\n" http://127.0.0.1/webmail/src/configtest.php
实测输出:
configtest HTTP:200
自检页正文实测回显(节选):
SquirrelMail version: 1.4.22
Config file version: 1.4.0
Checking PHP configuration...
PHP version 7.4.33 OK.
Running as www-data(33) / www-data(33)
variables_order OK: GPCS.
PHP extensions OK. Dynamic loading is disabled.
Checking paths...
Data dir OK.
Attachment dir OK.
Themes OK.
检查覆盖三块:PHP 运行时(版本/扩展/error 等级)、应用文件(配置文件代次匹配)、路径权限(data/attachment 目录可写性与 Web 可访问性告警)。Config file version 与 $config_version 对应,若手工改坏结构会在此暴露。
十四、常见问题(FAQ)
Q1:改了 config.php 页面没生效?
三种可能:① 改的是 config_default.php(全量模板,运行时不读取它)——确认改 config.php;② 语法错误导致 PHP 解析失败——php7.4 -l config/config.php 实测可做语法体检(输出 No syntax errors detected);③ 被 config_local.php 覆盖——同名变量以 local 文件为准,排查之。
Q2:内网 HTTP 部署登录后马上弹回登录页?
查 $only_secure_cookies:默认 true 在无 HTTPS 时会话 Cookie 不可用(实测该参数语义即"仅安全连接传 Cookie"),内网纯 HTTP 环境改 false;更推荐给站点上 TLS 后维持默认。
Q3:想批量改几十个用户/多台机器的配置,conf.pl 太慢?
conf.pl 是纯交互 TUI(实测无 CLI 参数),自动化应改为直接分发 config.php(或 config_local.php)文件:把一套验证过的配置文件推到各机 config/ 目录即完成配置分发,配合 src/configtest.php 批量验证。
Q4:中文界面/中文邮件乱码怎么配?
分两层:界面语言——装 locales 扩展包(1.4.18-20090526)解压到 locale/,$squirrelmail_default_language = 'zh_CN';内容字符集——$default_charset = 'utf-8' 且 $lossy_encoding = false。只改后者也能正常显示多数中文邮件(编码自动探测),但界面仍是英文。
Q5:data/attach 目录放哪里最安全?
放 Web 根之外且站点运行用户可写(实测默认 /var/local/squirrelmail/{data,attach} + 属主 www-data 即官方推荐位),并用 configtest.php 的 Data dir OK./Attachment dir OK. 回显验证;放应用目录内则必须配 Web 规则拒绝访问(Apache 下 Require all denied 段)。
十五、参考链接
- SourceForge 发布文件列表(1.4.22,config_default.php 注释即最全参数文档):https://sourceforge.net/projects/squirrelmail/files/stable/1.4.22/
- 配置向导 conf.pl 同目录文档(发布包内
doc/):应用根目录doc/下含官方说明 - Dovecot 认证配置(
$imap_auth_mech关联项):https://doc.dovecot.org/configuration_manual/authentication/ - 本平台系列文档:《SquirrelMail 1.4.22 介绍与选型指南》、《Ubuntu 22.04 安装 SquirrelMail 1.4.22 指南》、《SquirrelMail 1.4.22 Docker Compose 部署指南》