mailx是centos下的一种处理邮件的工具。
yum -y install mailx
然后对mail.rc文件进行配置
vim /etc/mail.rc
在配置文件末尾添加如下内容,这里阿里云有坑,先说非阿里云服务器都添加哪些内容
此处smtp-auth-password项不是邮箱密码,而是打开邮箱的pop3/smtp服务后提供的授权码
QQ邮箱的获取方式是登陆QQ邮箱mail.qq.com,设置=>账户往下拉POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务中将POP3/SMTP服务打开(需要用账号绑定手机发请求短信获取)
非阿里云:
set bsdcompat
set from=[email protected] #如:[email protected]
set smtp=smtp.qq.com #发送邮箱smtp服务器地址(必须开启smtp服务)
set smtp-auth-user=[email protected] #如:zhangsan,跟发送邮箱填一样的也行
set smtp-auth-password=XXXXXXXXXXXX #打开邮箱的pop3/smtp服务后提供的授权码
set smtp-auth=login
阿里云:
如果是阿里云等服务器,由于屏蔽了25号端口,会导致连接超时,所以我们需要配置465端口,配置如下
set bsdcompat
set from=[email protected] #如:[email protected]
set smtp="smtps://smtp.qq.com:465" #发送邮箱smtp服务器地址(必须开启smtp服务)其实就是加了个465端口号
set smtp-auth-user=[email protected] #如:zhangsan,跟发送邮箱填一样的也行
set smtp-auth-password=XXXXXXXXXXXX #打开邮箱的pop3/smtp服务后提供的授权码
set smtp-auth=login
set ssl-verify=ignore
以上这部分配置好即可,亲测就可发送邮件,跑一下邮件发送测试即可,如果不行,确保smtp发件确定OK的前提下,做以下证书操作
创建ssl证书
cd /root
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qqmail.crt //如果是126或者qq邮箱,把smtp.qq.com:465中的qq改掉即可
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qqmail.crt
certutil -L -d /root/.certs
信任证书
cd /root/.certs
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qqmail.crt
这里在/etc/mail.rc的配置中比非阿里云多两行
set bsdcompat
set from=[email protected] #如:[email protected]
set smtp="smtps://smtp.qq.com:465" #发送邮箱smtp服务器地址(必须开启smtp服务)
set smtp-auth-user=[email protected] #如:zhangsan,跟发送邮箱填一样的也行
set smtp-auth-password=XXXXXXXXXXXX #打开邮箱的pop3/smtp服务后提供的授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/root/.certs
测试邮件发送
echo "zabbix test mail" | mail -s "zabbix" [email protected]
zabbix默认的脚本位置是/usr/lib/zabbix/alertscripts/
如果是编译安装的自行查找zabbix/alertscripts位置
vim /usr/lib/zabbix/alertscripts/
#!/bin/bash
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/var/log/mailx.log 2>&1
修改权限
touch /tmp/mailx.log
chown -R zabbix.zabbix /tmp/mailx.log
chmod +x /usr/lib/zabbix/alertscripts/mailx.sh
chown -R zabbix.zabbix /usr/lib/zabbix/
测试脚本发送邮件
/usr/lib/zabbix/alertscripts/mailx.sh [email protected] "测试邮件标题" "测试邮件内容"
管理=>报警媒介类型=>创建新媒介类型
名称:mailx
类型:脚本
脚本名称:mailx.sh (此处务必与/usr/lib/zabbix/alertscripts 中的脚本名称一致)
脚本参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
配置用户权限,在管理=>用户=>选中Admin=>报警媒介
配置动作
标题内容:
故障{TRIGGER.STATUS},服务器名:{HOSTNAME1}发生: {TRIGGER.NAME}
消息内容:
告警主机:{HOSTNAME}
告警主机IP地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
可以关闭zabbix_agentd服务来激活邮件告警
也可以用其他监控项来测试,这里我用一个配置好的微服务监控的例子,直接杀掉微服务
killall java
至此zabbix邮件告警就完结了,Docker部署的zabbix还有坑呢,我遇到了容器内zabbix服务端无法调用mailx导致无法执行mailx.sh脚本的情况,如果有大佬知道怎么解决欢迎给我评论留言