必须安装mailx并正确配置smtp,禁用sendmail/postfix,严格按邮箱服务商要求设置/etc/mail.rc,处理中文乱码和换行,确保zabbix用户权限及配置生效。

邮件发送工具必须用 mailx,不能只装 sendmail
CentOS 7 默认没装 mailx,但 Zabbix/Prometheus 告警脚本几乎都依赖它发邮件。只装 sendmail 不够——它只负责后台投递,不提供命令行接口;mailx 才是调用 SMTP 发信的入口。
常见错误现象:脚本执行无报错但收不到邮件,mailq 显示队列为空,/var/log/maillog 里也没记录。本质是脚本里写的 mail 命令根本没生效。
- 必须执行:
yum install -y mailx - 禁用冲突服务:
systemctl stop sendmail postfix,并systemctl disable sendmail postfix(避免抢占 SMTP 端口) - 验证是否可用:
echo "test" | mailx -s "cli-test" your@email.com,不是mail
/etc/mail.rc 配置项顺序和值必须严格匹配邮箱服务商
QQ 邮箱、163、126 的 SMTP 地址、端口、认证方式都不一样,/etc/mail.rc 里写错一个字符就会静默失败。
最容易踩的坑是把授权码当登录密码填,或漏掉 set smtp-auth=login。QQ 邮箱必须用 smtp.qq.com + 端口 587(非 465),且必须开启 SMTP 服务并生成独立授权码。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- QQ 邮箱示例(末尾追加):
set from=xxx@qq.comset smtp=smtp.qq.comset smtp-auth-user=xxx@qq.comset smtp-auth-password=your-authorization-codeset smtp-auth=login - 163 邮箱要把
smtp.163.com换成对应地址,授权码也需单独开通 - 测试时别用简单内容,主题至少含字母+数字,正文别空行,否则可能被当成垃圾邮件拦截
Zabbix 告警脚本中必须处理换行和编码,否则邮件变附件
直接把 $3(告警内容)传给 mailx,中文会乱码,空行会被识别为 MIME 分隔符,导致整封邮件变成 xx.bin 附件。
核心问题是 shell 变量自带的回车符 \r\n 和邮件协议不兼容,且默认字符集不是 UTF-8。
- 脚本里必须转义换行:
messages=`echo "$3" | tr '\r\n' '\n'` - 加上字符集声明(在
/etc/mail.rc里):set sendcharsets=utf-8,iso-8859-1 - 如果仍乱码,补装
dos2unix并对脚本本身运行:dos2unix sendmail.sh - 日志重定向要完整:
>>/tmp/sendmail.log 2>&1,否则错误信息看不到
Alertmanager 或 Zabbix 调用脚本前,必须确认执行用户有权限读配置和发信
Alertmanager 以 root 启动,Zabbix Server 默认用 zabbix 用户跑。但 /etc/mail.rc 是全局配置,mailx 却会优先读取当前用户的 ~/.mailrc ——如果 zabbix 用户家目录下有同名文件,就会覆盖系统级设置。
- 检查:
sudo -u zabbix cat /etc/mail.rc是否可读;sudo -u zabbix mailx -V是否返回版本 - 确保脚本属主是
zabbix:zabbix:chown zabbix:zabbix /usr/lib/zabbix/alertscripts/sendmail.sh - Alertmanager 的
exec告警路由调用的是本地 shell,得确认其工作目录下没有干扰的.mailrc - 权限不足时典型报错:
Can't open /etc/mail.rc: Permission denied或静默无输出
mailx 配置在 Zabbix 脚本里能用,在 Alertmanager 的 webhook 或 exec 中可能就失效——必须挨个切换用户去手动验证,不能只测 root 下的命令行。










