使用sendmail发送报警邮件很麻烦,在服务器上装一个sendmail完全没有必要,所以采用外部smtp邮件服务器来发送报警邮件。 试过QQ邮箱,应该是做了限制,无法发送成功,然后再试了163邮箱,能够正常发送。

安装heirloom-mailx

sudo apt-get install heirloom-mailx

编辑nail.rc配置

sudo nano /etc/nail.rc 添加网易163邮箱开放的需要认证的smtp服务器:

set from=USER@163.com
set smtp=smtp.163.com
set smtp-auth-user=USER
set smtp-auth-password=PASSWORD
set smtp-auth=login

发送脚本 mail.sh

#!/bin/bash

to=$1
subject=$2
body=$3

cat <<EOF | heirloom-mailx -s "$subject" "$to"
$body
EOF

配置zabbix的媒体类型:

To configure custom alertscripts as the media type:

Go to Administration→Media types

Click on Create media typetype: script

script name: main.sh

参数填三个

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

给用户绑定媒体

Go to Administration→Users

Click on Admin or other user -> media -> click Add to add a media for the user

Type: 选 email send to: 填 the email of the user

配置action

Configuration->Actions 创建需要的action

关于邮件正文变成附件以及中文乱码的问题

经查是因为邮件正文包含\r\n,导致邮件出错,所以需要先将正文使用dos2unix处理一下:

#!/bin/sh
# 解决中文乱码问题
export LANG=zh_CN.UTF-8
to=$1
subject=$2
body=$3

# 方法1, 创建一个临时文件
FILE=/tmp/mailtmp.txt
if [ ! -f $FILE ];then 
touch $FILE
chown zabbix.zabbix $FILE
fi

echo "$body" > $FILE
dos2unix -k $FILE
heirloom-mailx -s "$subject" $to <$FILE

# 方法2, 管道输出
echo "$body" | dos2unix -k | heirloom-mailx -s "$subject" "$to"

处理完最后两个问题后,系统邮件发送已经正常,就是发送太频繁的时候,偶尔会被QQ邮箱拦截,不过完全可以满足日常监控了。