Zabbix3.0以后,自带的邮件报警支持SSL验证了,

但是仍然没有发送复数个邮箱以及CC,BCC的功能,

因此,我们还是得用别的方法来实现邮件报障。

实现方法有很多种,我用的是PHPmailer。

http://files.cnblogs.com/files/justbio/PHPMailer-master.zip

这个是比较新的PHPmailer,下载后解压到文件夹。

cd /usr/lib/zabbix/alertscripts/
unzip PHPMailer-master.zip

编写一个shell文件,是用来给zabbix调用的。

cd /usr/lib/zabbix/alertscripts/
vi sendmail.sh  
#!/bin/sh
nohup /usr/lib/zabbix/alertscripts/sendmessage_php.sh "$1" "$2" "$3" >/dev/null 2>&1 &

编写一个php文件,就是上面的sendmessage_php.sh

vi sendmessage_php.sh
#!/usr/bin/php

<?php

mb_language("uni");

mb_internal_encoding("UTF-8");

require('/usr/lib/zabbix/alertscripts/PHPMailer-master/PHPMailerAutoload.php');

$MAIL_LOG_PATH = '/var/log/zabbix-phpmailer'; //日志

$MAIL_FROM = "xxxxxxx@xxx.com"; //邮件的from信息

$MAIL_FROMNAME = "Zabbixtest 障害通知"; //邮件的from信息

$MAIL_SMTP_HOST = 'smtp.partner.outlook.cn:587'; //邮箱的host信息(ssl)

$MAIL_SMTP_USER = ' xxxxxxx@xxx.com '; //用户名

$MAIL_SMTP_PASS = 'xxxxxxx'; //密码

$retry_count = 3; //重试3次

//邮件的TO,CC从文件中取得,文件名为第一个参数

$MAIL_LIST_NM = $argv[1];

$MAIL_LIST = '/usr/lib/zabbix/alertscripts/addresslist/'.$MAIL_LIST_NM;

$MAIL_ADRESS = file_get_contents($MAIL_LIST);

$ADRESS_ARRAY = array();

$ADRESS_ARRAY = explode('##',$MAIL_ADRESS);

$MAIL_TO = $ADRESS_ARRAY[0];

$MAIL_CC = $ADRESS_ARRAY[1];

//邮件的标题和内容为第二,第三个参数

$MAIL_SUBJECT = $argv[2];

$MAIL_MESSAGE = $argv[3];

$mailer = new PHPMailer();

$mailer->CharSet = 'UTF-8';

$mailer->Encoding = 'base64';

$mailer->IsSMTP();

$mailer->SMTPSecure='tls';

$mailer->Host = $MAIL_SMTP_HOST;

$mailer->SMTPAuth = true;

$mailer->Username = $MAIL_SMTP_USER;

$mailer->Password = $MAIL_SMTP_PASS;

$mailer->From = $MAIL_FROM;

//to,cc,bcc edit

$TO_COUNT = array();

$CC_COUNT = array();

$TO_COUNT = explode(',',$MAIL_TO);

$CC_COUNT = explode(',',$MAIL_CC);

$key;

while ($key = current($TO_COUNT)) {

$mailer->AddAddress($key);

next($TO_COUNT);

}

while ($key = current($CC_COUNT)) {

$mailer->AddCC($key);

next($CC_COUNT);

}

$mailer->FromName = mb_convert_encoding($MAIL_FROMNAME,"UTF-8","UTF-8");

$mailer->Subject = $MAIL_SUBJECT;

$mailer->Body = mb_convert_encoding($MAIL_MESSAGE,"UTF-8","UTF-8");

/* logging data set */

$queuing_time = explode(' ', microtime());

$queuing_id = date('YmdHis', $queuing_time[1]).' '.$queuing_time[0];

$log_sub_dir = $MAIL_LOG_PATH;

$log_filename = $log_sub_dir .'/'.substr($queuing_id, 0, 8).'.txt';

$log_message = "From: $MAIL_FROM\n";

$log_message .= "To: $MAIL_TO\n";

$log_message .= "Subject: $MAIL_SUBJECT\n";

$log_message .= "Message: $MAIL_MESSAGE\n";

$retry = 0;

/* mail info */

$mail_info = ' to send mail to ';

$mail_info .= $MAIL_LIST_NM;

$mail_info .='(';

$mail_info .= 'Subject:'.$MAIL_SUBJECT;

$mail_info .= ' To:'.str_replace("\n","",$MAIL_TO);

$mail_info .= ' Cc:'.str_replace("\n","",$MAIL_CC);

$mail_info .= ' Message:'.str_replace("\n","←",$MAIL_MESSAGE);

$mail_info .=')';

//如果失败,重试3次

do{

try {

$send_result=$mailer->Send();

} catch (Exception $e) {

Logging($log_sub_dir, $log_filename, $queuing_id.'['.$retry.']', 'Exception:'.$e->getMessage()."\n");

$send_result=false;

}

if(!$send_result){

Logging($log_sub_dir, $log_filename, $queuing_id.'['.$retry.']', 'Result: failed '.$mailer->ErrorInfo."\n".$log_message);

print 'failed: ' . $mailer->ErrorInfo . "\n";

}else{

Logging($log_sub_dir, $log_filename, $queuing_id.'['.$retry.']', "Result: success\n".$log_message);

print 'success' . "\n";

break;

}

$retry++;

sleep(10);

$log_message = '';

}while ($retry < $retry_count);

if($retry==$retry_count){

OutputResult($log_sub_dir,$log_sub_dir.'/mailresult.log', 'outlook failed'.$mail_info);

}else{

OutputResult($log_sub_dir,$log_sub_dir.'/mailresult.log', 'outlook success'.$mail_info);

}

/* logging */

function Logging($dir, $filename, $id, $message) {

if (!is_dir($dir)) { mkdir($dir, 0755); }

$logging_time = explode(' ', microtime());

$logging_date = date('YmdHis', $logging_time[1]).' '.$logging_time[0];

$log = '----- Logging Date: '.$logging_date."\n";

$log.= 'Queuing ID: '.$id."\n";

$log.= $message."\n";

$fp = fopen($filename, 'a');

fwrite($fp, $log);

fclose($fp);

}

function OutputResult($dir, $filename, $info) {

if (!is_dir($dir)) { mkdir($dir, 0755); }

$logging_time = explode(' ', microtime());

$logging_date = date('YmdHis', $logging_time[1]);

$log = $logging_date.':'.$info."\n";

$fp = fopen($filename, 'a');

fwrite($fp, $log);

fclose($fp);

}

?>

编辑地址簿文件,不同的地址用逗号隔开,to和cc用##隔开

mkdir /usr/lib/zabbix/alertscripts/addresslist
vi test
xxxx@xxx.com##yyyy@yyy.com,zzzz@zzz.com

回到zabbix网页

Administrator -> media type -> create media type

如下设置

*在zabbix3.0以前,PARAMETER是固定的,不用设置也不能更改。3.0默认值变成空值,需要自己设置。

Administrator -> user -> create user

名字我这里取testuser,在media标签中点add,如下填写

Send to 填的是刚才建的地址簿的文件名

Pemmision标签当然是选择zabbixadministrators

Configuration -> Action ->create action

名字我这里取testaction,在action和conditions标签按实际需求填写,

Operations中点New,如下填写

*user我这里涂掉了,应该填的是刚才新建的testuser

这样,自动邮件就配置完成了,让我们测试一下脚本

./sendmail.sh test testsubject testmessage

第一个参数是地址簿的文件名,第二个参数是标题,第三个参数是正文

地址簿test里的所有人都会收到标题为testsubject,正文为testmessage的邮件。

Zabbix3.0 自动邮件报障的更多相关文章

  1. Zabbix3.0 自动微信报障

    本来研究了一段时间短信报障的,但是短信报障需要手机运营商的设备支持,就没有继续下去. 正好发现微信公众号可以报障,完全可以代替短信报警的功能. 首先你需要一个微信公众号,实名认不认证没关系. http ...

  2. zabbix3.0.4 邮件告警详细配置

    sendEmail是一个轻量级,命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大.这个被设计用在php.bash perl和web ...

  3. zabbix3.0配置邮件报警

    我们部署一套监控软件,报警这一块自然不可或缺,接下来我们看看zabbix如何实现邮件报警.   1.编写发送邮件的脚本 zabbix通脚本发送邮件,遵循的传参格式为: 脚本   收件人  标题  邮件 ...

  4. zabbix3.0自动发现磁盘并监控磁盘IO

    Zabbix 版本:3.0 操作系统:Ubuntu16.04 操作环境,在被监控的主机上安装zabbix agent.安装方式为源码包安装. 简要安装步骤: 参考:https://www.zabbix ...

  5. zabbix3.0.4 部署之七 (zabbix3.0.4 邮件报警) & 微信报警

    1 [root@sv-zabbix ~]# cat /usr/local/zabbix/share/zabbix/alertscripts/sendEmail.sh #!/bin/bash#SMTP_ ...

  6. 分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署

    前面几篇陆续介绍了zabbix3.0.3监控系统的部署和监控项配置,今天这里分享下zabbix3.0.3的邮件报警的配置过程~由于采用sendmail发送邮件,常常会被认为是垃圾邮件被拒,所以不推荐这 ...

  7. zabbix3.0.3 设置邮件报警

    在zabbix3.0.3 设置报警这里卡了两天.终于解决了,这里我使用的mailx来作为发送邮件的客户端 1.设置mailx发信账号 yum -y install mailx ln -s /bin/m ...

  8. zabbix系列(九)zabbix3.0实现自动触发zabbix-agent端shell脚本任务

    zabbix实现自动触发远程脚本执行命令 Zabbix触发器(trigger)达到阀值后会有动作(action)执行:发送告警信息或执行远程命令 环境 Server:基于centos6.5 final ...

  9. zabbix3.0.4 配置邮件报警

    试验环境: LAMP环境 (LNMP环境已经成功了,为了避免干扰,我另一台LAMP主机) ### 我在做实验之前,作了时间同步,不知道这个有木有影响,一起说一下吧! yum -y install nt ...

随机推荐

  1. Java--类的使用

    一 方法内部类        1.打开eclipse 选择你的代码存放的地方 2.新增Java项目 点击File-->New-->java project 3.添加一个包        4 ...

  2. C++Builder Berlin 编译

    编译工程,一个单元有错误,就停下了, 能不能把所有单元都编译,一次处理所有单元的错误?

  3. ubuntu mysql emma中文乱码问题解决

    ubuntu mysql emma中文乱码问题解决 emma默认用apt-get 安装的话,emma是不支持中文的,配置文件或直接修改emma程序源文件(python). apt-get安装emma ...

  4. 2.Mybatis入门程序(单表的增删改成)

    这里讲的单表的增删改查,是由mapper代理的增删改查,先来看看步骤: 1.jar包的导入 2.配置全局的配置文件 3.建立接口 4.编写mapper.xml 5.测试 工程结构:这个你们自己可以调整 ...

  5. iOS设计模式-Block实现代理的逻辑

    在A页面,点击跳转到B页面,B页面操作完,回到A页面,并刷新A页面的内容.典型的例子,就是在一个列表里,点击新增,跳到新增页面,新增完,把数据传回给列表页,并刷新列表页里的内容. 这个,我平时一般是通 ...

  6. 【iOS问题】The file “XXX.app” couldn’t be opened because you don’t have permission to view it.

    当引入第三方的框架的时候 容易产生以下问题: The file "XXX.app" couldn't be opened because you don't have permis ...

  7. jQuery2

    一.类型选择器 jQuery的类型选择器 选择器 说明 :button 选择所有按钮 :checkbox 选择所有复选框 :file 选择所有文件上传输入框 :header 选择所有标题元素(h1,h ...

  8. Selenium2+python自动化26-js处理内嵌div滚动条

    前言 前面有篇专门用js解决了浏览器滚动条的问题,生活总是多姿多彩,有的滚动条就在页面上,这时候又得仰仗js大哥来解决啦. 一.内嵌滚动条 1.下面这张图就是内嵌div带有滚动条的样子,记住它的长相.

  9. 阅读笔记 The Impact of Imbalanced Training Data for Convolutional Neural Networks [DegreeProject2015] 数据分析型

    The Impact of Imbalanced Training Data for Convolutional Neural Networks Paulina Hensman and David M ...

  10. oracle 驱动安装备忘

    ubuntu 从oracle官网下载两个必须的rpm包(这里选择的是version12.1.0.2.0, 64位操作系统) oracle-instantclient12.1-basic-12.1.0. ...