zabbix邮件标题正文乱码解决

zabbix是通过传递参数给一个shell脚本进行邮件的发送。

在配置文件zabbix_server.conf中有定义,类似如下:
AlertScriptsPath=/usr/local/apache2/htdoc/zabbix/alertscripts

此目录下有个文件sendmail.sh的脚本
其中可以看出在通过在脚本后面跟上参数传递收件人、标题和正文,所以解决乱码的原理就是将subject和message的内容进行编码转换,然后再通过/usr/local/bin/msmtp进行发送,传参语句如下:
recipient=$1
subject=$2
message=$3
调用方法: ./sendmail.sh  ‘admin@dearda.com’ ‘Test测试邮件’ ‘这是正文’

不知为何收到的邮件没有正文,以后再研究了。

编码转换方法其实就是加上两段语句即可,修改后的sendmail.sh如下:

#! /bin/sh 
DEBUG=1
if [ $DEBUG -gt 0 ]
then
        exec 2>>/opt/soft/zabbix/logs/mail_msmtp.log
        set -x 
fi
FROM=admin@dearda.com
MSMTP_ACCOUNT='default'
#MSMTP_ACCOUNT='zabbix'
# Parameters (as passed by Zabbix): 
#  $1 : Recipient 
#  $2 : Subject 
#  $3 : Message 
recipient=$1
subject=$2
message=$3
subject_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$subject
EOF`
message_gb2312=`iconv -t GB2312 -f UTF-8 << EOF
$message
EOF`
date=`date --rfc-2822`
sed 's/$/\r/' <<EOF  | /usr/local/bin/msmtp --account $MSMTP_ACCOUNT $recipient
From: <$FROM>
To: <$recipient>
Subject: $subject_gb2312
Date: $date
$message_gb2312
EOF

 

之后收到的邮件编码都是gb2312了,就不存在乱码的问题。

参考自:http://qicheng0211.blog.51cto.com/3958621/1434514