25端口被云厂商默认封禁是邮件发送失败的主因;需通过telnet验证,再按阿里云/腾讯云/华为云规则申请解封或改用465/587端口;MX记录须正确配置且指向域名而非IP;TLS错误需调高密码强度;SQLite报错可手动添加配置绕过检测。

检查服务器25端口是否被云厂商封禁
宝塔邮局插件安装后无法发送邮件,或Rspamd/Postfix服务反复失败,大概率是25端口被屏蔽——这是国内几乎所有云厂商(阿里云、腾讯云、华为云)的默认策略。面板里“邮局管理器”显示环境正常,但测试发信直接超时,根本原因就在这儿。
验证方式很简单:telnet smtp.gmail.com 25 或 nc -zv smtp.gmail.com 25。如果返回 Connection refused 或长时间无响应,基本可确认25端口出向被阻断。
- 阿里云:需提交工单申请解封,仅限企业认证用户,且必须说明用于自建邮件服务器
- 腾讯云:控制台「安全组」中添加出方向规则,目标端口
25,协议TCP,但实际仍可能被底层拦截,需同时提交工单 - 华为云:在「网络与安全 → 安全组」中放行25端口,并单独申请“邮件端口白名单”,审批周期通常1–3工作日
- 若无法解封(如个人轻量应用服务器),只能改用465/587端口配合第三方SMTP中继(如Mailgun、SendGrid),此时Postfix需重配
smtp_tls_security_level和relayhost
验证域名MX记录是否生效且指向正确IP
邮局插件装完却收不到外部邮件,90%的情况是MX记录没配或配错。宝塔邮局本身不提供DNS托管,MX必须在你域名的DNS服务商处(如Cloudflare、阿里云DNS、腾讯云DNSPod)手动设置。
执行 dig MX yourdomain.com +short 查看当前解析结果。正确输出应类似:10 mail.yourdomain.com.,注意末尾的点不能少,且mail.yourdomain.com 必须能通过 dig A mail.yourdomain.com +short 解析到你服务器的公网IP。
- MX记录优先级数字(如10、20)只是备用顺序,不是必须从10开始;但多个MX记录时,数值越小优先级越高
- 禁止将MX直接指向IP地址(如
10 1.2.3.4),RFC标准明确要求MX必须为域名 - Cloudflare免费版会隐藏真实IP,导致MX解析到Cloudflare代理IP,Postfix拒绝接收——务必把
mail.yourdomain.com的DNS记录设为“DNS only”(灰色云图标) - 修改MX后DNS传播最长需48小时,但多数国内DNS 5–15分钟内生效,可用
nslookup -type=mx yourdomain.com 114.114.114.114指定公共DNS验证
Postfix报“unsupported cipher”或“no shared cipher”错误
这个错误常见于启用TLS后Postfix与客户端握手失败,本质是OpenSSL版本和密码套件不匹配。Ubuntu 20.04/22.04或CentOS Stream 8+系统自带OpenSSL 3.x,而旧版Postfix配置仍沿用SHA1或弱加密算法,会被现代客户端(如Gmail、Outlook)主动拒绝。
检查Postfix主配置:postconf -n | grep smtpd_tls,重点关注 smtpd_tls_ciphers 和 smtpd_tls_mandatory_ciphers。默认值如 medium 已不安全,需显式收紧:
- 编辑
/etc/postfix/main.cf,追加或修改:smtpd_tls_ciphers = high,smtpd_tls_mandatory_ciphers = high - 确保证书链完整:用
openssl s_client -connect mail.yourdomain.com:25 -starttls smtp查看Verify return code,非0表示证书链断裂,需补全中间证书 - 重启服务:
systemctl restart postfix,再用swaks --to test@gmail.com --from postmaster@yourdomain.com --server mail.yourdomain.com:25测试连通性
邮局管理器提示“Postfix不支持SQLite”但已安装
宝塔邮局界面检测逻辑僵硬,它只认特定路径下的Postfix二进制是否链接了SQLite模块,而不是实际运行时是否加载。即使你用apt install postfix-sqlite装了,面板仍可能报错,因为Debian/Ubuntu系Postfix默认不启用SQLite支持,需手动编译或切换包源。
临时绕过检测的实操方法(不影响功能):
- 确认SQLite模块已存在:
ls /usr/lib/postfix/sqlite.so,若存在则说明底层支持已就绪 - 强制让Postfix加载该模块:编辑
/etc/postfix/main.cf,添加sqlite_connection_cache_limit = 10(任意有效SQLite参数) - 重载配置:
postfix reload,再回到宝塔面板点击“修复”,此时检测脚本会读取到配置中有SQLite关键词,不再报错 - 长期方案:改用AlmaLinux 9或Rocky Linux 9,其Postfix RPM包默认启用SQLite,与宝塔兼容性更好
邮局插件的问题从来不是单点故障,而是网络层、DNS层、TLS层、配置层四者咬合的结果。最常被忽略的是:云厂商对25端口的封禁是“静默”的——没有错误日志,没有告警,只有发信超时。动手前先做一次telnet,比翻十遍日志更高效。










