先确认 mail 命令所属软件包:debian/ubuntu 默认为 mailutils(附件参数 -a),centos/rhel 默认为 mailx(附件参数 -a);配置 qq 邮箱需设 from、smtp、smtp-auth-user(完整邮箱)、smtp-auth-password(授权码),并启用 starttls;发信失败优先查 /var/log/mail.log 或 journalctl 日志,勿盲目重试。

mail 命令发不出邮件?先确认你装的是哪个 mail
Linux 上叫 mail 的命令,背后可能是 heirloom-mailx、bsd-mailx 或 mailutils,不同发行版默认不一样,行为也差很多——比如 Debian 默认用 mailutils,附件参数是 -A;而 CentOS/RHEL 用 mailx,附件参数是 -a。不统一就容易报错:mail: illegal option -- A 或根本没反应。
- 查清楚你用的是哪个:
which mail+mail -V或dpkg -l | grep mail(Debian/Ubuntu)、rpm -qa | grep mailx(RHEL/CentOS) - Ubuntu 用户优先装
mailutils:sudo apt-get install mailutils - CentOS 7+ 用户建议装
mailx:sudo yum install mailx(或dnf install mailx) - 别混用配置文件:
/etc/mail.rc是mailx系列的配置路径;/etc/nail.rc是旧版nail的,现在基本不用
/etc/mail.rc 配置 QQ 邮箱 SMTP 必须改对这四行
QQ 邮箱必须用授权码(不是登录密码),且必须开 SMTP,否则 mail 会卡住、超时或静默失败。配置写错一行,整条命令就白跑。
-
set from=your@qq.com:必须和smtp-auth-user一致,否则腾讯服务器拒收 -
set smtp=smtp.qq.com:端口默认是 25,但国内很多网络封 25,建议加set smtp-use-starttls(QQ 支持 STARTTLS) -
set smtp-auth-user=your@qq.com:注意是完整邮箱地址,不是用户名(your不行,your@qq.com才对) -
set smtp-auth-password=xxxxxx:这里填的是「授权码」,不是 QQ 密码,在邮箱设置 → 「账户」→ 「POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务」里生成
配完别急着发,先测试连通性:echo "test" | mail -s "config-test" your@qq.com。如果没收到,看 /var/log/mail.log(Ubuntu)或 /var/log/maillog(CentOS)有没有 authentication failed 或 connection refused。
带附件发邮件,-a 和 -A 到底该用哪个
这是最常翻车的点:Debian/Ubuntu 系的 mail(来自 mailutils)用 -A 加附件;Red Hat 系的 mailx 用 -a。写反了不会报错,但附件根本不会发出去——收件人只看到空邮件。
- Ubuntu/Debian:
echo "body" | mail -s "log" -A /tmp/access.log admin@domain.com - CentOS/RHEL:
echo "body" | mail -s "log" -a /tmp/access.log admin@domain.com - 如果要兼容两者,绕过命令行参数,改用
uuencode+ 管道:uuencode /tmp/log.txt log.txt | mail -s "log" admin@domain.com(需装sharutils) - 附件路径必须是绝对路径,相对路径在脚本中容易因工作目录变化失效
发邮件失败时,第一眼看日志而不是重试
mail 命令失败几乎从不直接报错,它会默默把信扔进本地队列(/var/spool/mail/root),或者丢进系统日志。反复 echo ... | mail 只会让问题更模糊。
- 检查发送状态:
mailq(看有没有积压任务)、sendmail -bp(老系统) - 查实时日志:
tail -f /var/log/mail.log(Debian/Ubuntu)或journalctl -u postfix -f(如果启用了 postfix) - 常见错误原文直接搜:
535 Error: authentication failed→ 授权码错或未开 SMTP;554 Mail from domain not accepted→from和smtp-auth-user不一致;Connection timed out→ 网络策略封了 25/465/587 端口 - 临时关闭本地 MTA 更干净:
sudo systemctl stop postfix sendmail,避免本地队列干扰
真正麻烦的不是配置,而是授权码过期、企业防火墙拦截、或跨服务商(如 QQ 发给 163)被限频——这些都不会在终端提示,得去收件箱查“被拒收”通知或登录邮箱后台看 SMTP 日志。










