mail命令发不出邮件因默认调用本地mta而非外部smtp,且云服务器常封25端口、主流邮箱强制要求smtp认证与加密;需在/etc/mail.rc中正确配置smtp、smtp-auth-user、smtp-auth-password(授权码)、smtp-auth=login及ssl-verify=ignore等参数。

不能直接用 mail 发到 QQ/Gmail/163 邮箱,除非你配对了 smtp、smtp-auth-password 和加密方式——否则邮件会静默失败或被拒收。
为什么 mail 命令发不出去?
默认的 mail(实际常为 mailx 或 bsd-mailx)不连外部 SMTP,而是试图调用本地 MTA(如 sendmail 或 postfix)。但多数云服务器(阿里云、腾讯云)已封 25 端口,且 QQ/Gmail 等强制要求 SMTP 认证 + 加密,裸跑 mail -s "test" user@xx.com 必然失败。
- 现象:命令无报错、无回显,但收件箱收不到;或提示
535 Error: authentication failed/Connection refused - 根本原因:
/etc/mail.rc或~/.mailrc没配,或配了但端口/协议/证书不匹配 - 关键点:
smtp-auth-password必须是邮箱「授权码」,不是登录密码;QQ/163/Gmail 都要进设置里单独开通 SMTP 并生成
mailx 配置 SMTP 的最小必要项
只改 /etc/mail.rc(系统级,所有用户生效)即可,不用动 postfix 或关本地服务(除非冲突)。
-
set from=your@qq.com:必须和smtp-auth-user一致 -
set smtp=smtps://smtp.qq.com:465:QQ 邮箱固定用smtps://+ 465;若用 587 端口,则写smtp://smtp.qq.com:587并加set smtp-use-starttls -
set smtp-auth-user=your@qq.com:完整邮箱地址(163 同理;Gmail 要带@gmail.com) -
set smtp-auth-password=xxxxxxx:授权码,明文写入,注意文件权限(chmod 600 /etc/mail.rc) -
set smtp-auth=login:认证方式,固定写login,别写plain或留空
示例(QQ 邮箱):
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
set from=abc@qq.com set smtp=smtps://smtp.qq.com:465 set smtp-auth-user=abc@qq.com set smtp-auth-password=abcdefghijk set smtp-auth=login set ssl-verify=ignore
ssl-verify=ignore 是临时方案,生产环境应配 set nss-config-dir=/etc/pki/nssdb 和真实证书。
测试发送与常见失败场景
执行后立刻验证,别等 cron 或脚本里才发现问题。
- 基础测试:
echo "test body" | mail -s "test subject" someone@163.com - 带附件(需
heirloom-mailx):echo "see attach" | mail -s "log" -A /var/log/syslog someone@gmail.com - 失败时看终端输出:若卡住几秒后返回空行,大概率是 DNS 解析失败或端口不通;若报
Can't send mail: Null host name,说明from或smtp没设 - 脚本中失效:cron 默认
HOME=/,不会读~/.mailrc;务必用/etc/mail.rc,或在脚本开头加export HOME=/root(并确保该用户下有有效.mailrc)
不同邮箱的 SMTP 地址和端口差异
抄错地址或端口是高频错误。不要凭记忆写,直接查邮箱官网 SMTP 设置页。
- QQ 邮箱:
smtps://smtp.qq.com:465或smtp://smtp.qq.com:587 - 163 邮箱:
smtps://smtp.163.com:465或smtp://smtp.163.com:25(25 端口基本被封) - Gmail:
smtps://smtp.gmail.com:465(需开启两步验证并生成 App Password) - 腾讯企业邮:
smtps://smtp.exmail.qq.com:465,且必须配 NSS 证书(certutil导入),ssl-verify=ignore无效
端口选 465 还是 587?优先 465 —— 它是隐式 SSL,配置简单;587 是 STARTTLS,需额外加 set smtp-use-starttls,且部分老版 mailx 不支持。










