打算用Python3的脚本,简单又明了,所以自定义目录先安装python3
    python3.6下载解压、编译安装、使用所有CPU编译、软连接到/usr/bin/python3。

    1. wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz && tar -zxvf Python-3.6.1.tgz && cd Python-3.6.1
    2. ./configure --prefix=/data/python3
    3. make -j `nproc ` && make install
    4. ln -s /data/python3/bin/python3 /usr/bin/python3

    在Zabbix server目录下创建一个脚本目录用于zabbix server端读取python脚本

    1. mkdir /data/zabbix/scripts/

    在Zabbix server的配置文件中添加读取脚本的路径

    1. echo "AlertScriptsPath=/data/zabbix/scripts" >> /data/zabbix/etc/zabbix_server.conf

    创建python脚本(下面由163邮箱举例)

    vim /data/zabbix/scripts/sendmail.py

    #!/usr/bin/python3
    # -*- coding:UTF-8 -*-
    # =====================Description=====================
    # [Features]: SMTP电子邮件发送
    # [Usage]: ./sendmail.py receiver@example.com Subject Message
    #          Put it in: /usr/local/zabbix/alertscripts
    # =====================================================
    import sys
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    from email.utils import parseaddr,formataddr
    
    # <----------------------------Configure Start--------------------------->
    # STMP Config
    #163smtp服务器
    SMTP_Host="smtp.163.com"
    #smtp端口
    SMTP_Port=465
    #163邮箱账号
    SMTP_User="163邮箱账号"
    #163邮箱的账号对应的安全码(此处非密码)
    SMTP_Pass="163安全码"
    # Mail Config
    Mail_From="Zabbix Monitor<%s>" % SMTP_User
    Mail_To=sys.argv[1]
    Mail_Subject=sys.argv[2]
    Mail_Body=sys.argv[3]
    # <----------------------------Configure  End---------------------------->
    # 署名格式化函数
    def _format_addr(s):
        name, addr = parseaddr(s)
        return formataddr((Header(name, 'utf-8').encode(), addr))
    
    
    # 格式化署名和接收人信息
    message=MIMEMultipart()
    message['From'] = _format_addr(Mail_From)
    message['To'] = _format_addr(Mail_To)
    message['Subject'] = Header(Mail_Subject, 'utf-8').encode()
    message.attach(MIMEText(Mail_Body, 'html', 'utf-8'))
    
    # 发送邮件!
    try:
        smtpobj = smtplib.SMTP_SSL(SMTP_Host,SMTP_Port)
        smtpobj.login(SMTP_User, SMTP_Pass)
        smtpobj.sendmail(Mail_From,  Mail_To, message.as_string())
        print('邮件发送成功')
        smtpobj.quit()
    except smtplib.SMTPException as e:
        print('邮件发送失败,Case:%s'%e)
    

    添加执行权限

    chmod 766 /data/zabbix/scripts/sendmail.py
    chown zabbix.zabbix sendmail.py
    

    完成后对邮箱发送一封邮件进行测试

    ./sendmail.py dobixu@163.com 告警标题 '<h1 style="color:blue;">This is a Message</h1>'
    

    发送成功,以及收到了这封邮件
    1.png2.png

    • 在Zabbix-Web端-管理-报警媒介类型修改Email

    3.png
    脚本名称:
    sendmail.py
    参数:
    {ALERT.SENDTO}
    {ALERT.SUBJECT}
    {ALERT.MESSAGE}
    中添加告警模板我这边是自定义的4.png

    5.png

    • 在Zabbix-Web端-配置-动作-Report problems to Zabbix administrators-操作

    默认标题:
    [报警触发] 当前状态:{TRIGGER.STATUS},服务器:{HOSTNAME1} 发生:{TRIGGER.NAME}故障!
    消息内容:

    <table border="1"  bordercolor="black" cellspacing="0px" cellpadding="4px" width="500px">
    <tr bgcolor="#FF3333"><th colspan=2>
    {TRIGGER.STATUS} Status Report
    </tr>
    <tr >
    <td bgcolor="#ff7d0a" width="20%">告警主机</td>
    <td bgcolor="#ff7d0a">{HOSTNAME1}</td>
    </tr>
    <tr >
    <td bgcolor="#ff7d0a">告警别名</td>
    <td bgcolor="#ff7d0a">{HOST.NAME} </td>
    <tr >
    <tr >
    <td bgcolor="#ff7d0a">告警地址</td>
    <td bgcolor="#ff7d0a">{HOST.IP}</td>
    </tr>
    <tr>
    <td bgcolor="#ff7d0a">告警时间</td>
    <td bgcolor="#ff7d0a">{EVENT.DATE} {EVENT.TIME}</td>
    </tr>
    
    <tr>
    <td bgcolor="#ff7d0a">告警等级</td>
    <td bgcolor="#ff7d0a">{TRIGGER.SEVERITY}</td>
    </tr>
    
    <tr>
    <td bgcolor="#ff7d0a">告警信息</td>
    <td bgcolor="#ff7d0a">{TRIGGER.NAME}</td>
    </tr>
    
    <tr>
    <td bgcolor="#ff7d0a">告警项目</td>
    <td bgcolor="#ff7d0a">{TRIGGER.KEY1}</td>
    </tr>
    <tr >
    <td bgcolor="#FF3333">问题详情</td>
    <td bgcolor="#FF3333">{ITEM.NAME}:&nbsp;{ITEM.VALUE}</td>
    </tr>
    <tr>
    <td bgcolor="#ff7d0a">当前状态</td>
    <td bgcolor="#ff7d0a">{TRIGGER.STATUS}:&nbsp;{ITEM.VALUE1}</td>
    </tr>
    <tr>
    <td bgcolor="#ff7d0a">事件ID</td>
    <td bgcolor="#ff7d0a">{EVENT.ID}</td>
    </tr>
    </table>
    
    • 在Zabbix-Web端-配置-动作-Report problems to Zabbix administrators-恢复操作
    • 并且它的状态必须为启用状态

    6.png
    image.png
    默认标题:
    [报警恢复] 当前状态:{TRIGGER.STATUS},服务器:{HOSTNAME1} 发生:{TRIGGER.NAME}恢复!
    消息内容:

    <table border="1"  bordercolor="black" cellspacing="0px" cellpadding="4px" width="500px">
    <tr bgcolor="#49c208"><th colspan=2>
    {TRIGGER.STATUS} Status Report
    </tr>
    
    <tr >
    <td bgcolor="#ffba00" width="20%">恢复主机</td>
    <td bgcolor="#ffba00">{HOSTNAME1}</td>
    </tr>
    <tr >
    <td bgcolor="#ffba00">恢复别名</td>
    <td bgcolor="#ffba00">{HOST.NAME} </td>
    <tr >
    <td bgcolor="#ffba00">恢复地址</td>
    <td bgcolor="#ffba00">{HOST.IP}</td>
    </tr>
    <tr>
    <td bgcolor="#ffba00">恢复时间</td>
    <td bgcolor="#ffba00">{EVENT.DATE} {EVENT.TIME}</td>
    </tr>
    
    <tr>
    <td bgcolor="#ffba00">恢复等级</td>
    <td bgcolor="#ffba00">{TRIGGER.SEVERITY}</td>
    </tr>
    
    <tr>
    <td bgcolor="#ffba00">恢复信息</td>
    <td bgcolor="#ffba00">{TRIGGER.NAME}</td>
    </tr>
    
    <tr>
    <td bgcolor="#ffba00">恢复项目</td>
    <td bgcolor="#ffba00">{TRIGGER.KEY1}</td>
    </tr>
    <tr >
    <td bgcolor="#49c208">恢复详情</td>
    <td bgcolor="#49c208">{ITEM.NAME}:&nbsp;{ITEM.VALUE}</td>
    </tr>
    <tr>
    <td bgcolor="#ffba00">当前状态</td>
    <td bgcolor="#ffba00">{TRIGGER.STATUS}:&nbsp;{ITEM.VALUE1}</td>
    </tr>
    <tr>
    <td bgcolor="#ffba00">事件ID</td>
    <td bgcolor="#ffba00">{EVENT.ID}</td>
    </tr>
    </table>
    
    • 在Zabbix-Web端-管理-用户-报警媒介-添加

    添加收件人邮箱
    7.png
    那么告警以及恢复的时候都会发送邮件给到收件人。
    那么就到此为止了。

    以下参数可以自己看看
    告警主机:{HOSTNAME1}
    告警别名:{HOST.NAME}
    告警地址:{HOST.IP}
    监控项目:{ITEM.NAME}
    监控取值:{ITEM.LASTVALUE}
    告警等级:{TRIGGER.SEVERITY}
    当前状态:{TRIGGER.STATUS}
    告警信息:{TRIGGER.NAME}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    事件ID:{EVENT.ID}