设为首页收藏本站language 语言切换
查看: 2166|回复: 9
收起左侧

[原创] python脚本用来nagios发送邮件

[复制链接]
发表于 2013-5-3 11:30:45 | 显示全部楼层 |阅读模式
之前公司nagios发送邮件的脚本是用expect来写的,但是一直有一个弊端就是nagios邮件正文不能换行,只能在一行显示,每次报警看起来都很费劲。一直想换了它,这次用python的脚本就解决的这个换行的问题。
  废话少说,上脚本:

    #!/usr/bin/python import smtplib import string import sys import getopt def usage():    print """sendmail is a send mail Plugins    Usage:    sendmail [-h|--help][-t|--to][-s|--subject][-m|--message]    Options:           --help|-h)                  print sendmail help.           --to|-t)                  Sets sendmail to email.           --subject|-s)                   Sets the mail subject.           --message|-m)                   Sets the mail body     Example:            only one to email  user           ./sendmail -t 'eric@nginxs.com' -s 'hello eric' -m 'hello eric,this is sendmail test!            many to email  user           ./sendmail -t 'eric@nginxs.com,zhangsan@nginxs.com' -s 'hello eric' -m 'hello eric,this is sendmail test!"""    sys.exit(3) try:    options,args = getopt.getopt(sys.argv[1:],"ht:s:m:",["help","to=","subject=","message="]) except getopt.GetoptError:    usage() for name,value in options:     if name in ("-h","--help"):        usage()     if name in ("-t","--to"): # accept message user        TO = value        TOTO = TO.split(",")     if name in ("-s","--title"):        SUBJECT = value     if name in ("-m","--message"):        MESSAGE = value        MESSAGE = MESSAGE.split('\\n')        MESSAGE = '\n'.join(MESSAGE) #smtp HOST HOST = "smtp.126.com"                #改为你的邮局SMTP 主机地址 #smtp port PORT = "25"                          #改为你的邮局的SMTP 端口 #FROM mail user USER = 'eric'                        # 改为你的邮箱用户名 #FROM mail password PASSWD = '123456'                    # 改为你的邮箱密码 #FROM EMAIL FROM = "test@163.com"                # 改为你的邮箱 email try:    BODY = string.join((       "From: %s" % FROM,       "To: %s" % TO,       "Subject: %s" % SUBJECT,       "",       MESSAGE),"\r\n")    smtp = smtplib.SMTP()    smtp.connect(HOST,PORT)    smtp.login(USER,PASSWD)    smtp.sendmail(FROM,TO,BODY)    smtp.quit() except:    print "UNKNOWN ERROR"    print "please look help"
  •    print "./sendmail -h"
使用方法:
只给一个用户发:
nagios $> ./sendmail -t 'test@163.com' -s 'hello' -m 'hello,this is sendmail test!
给多个用户发:
./sendmail -t ' test@163.com,test02@163.com' -s 'hello' -m 'hello,this is sendmail test!
应用到nagios上,用来报警:
[root@master ~]# vim /etc/nagios/objects/commands.cfg
define command{
        command_name    notify-host-by-email
        command_line    $USER1$/sendmail -t $CONTACTEMAIL$ -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **"  -m  "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n"
        }

define command{
        command_name    notify-service-by-email
        command_line    $USER1$/sendmail -t  $CONTACTEMAIL$ -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **"  -m  "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$"
        }
[root@master ~]# /etc/init.d/nagios reload
这样就可以了。
发表于 2013-5-3 13:00:25 | 显示全部楼层
沙发 2013-5-3 13:00:25 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2013-5-3 14:34:12 | 显示全部楼层
谢谢,O(∩_∩)O哈哈~
板凳 2013-5-3 14:34:12 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2013-5-5 10:24:52 | 显示全部楼层
谢谢,O(∩_∩)O哈哈~
地板 2013-5-5 10:24:52 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2016-7-28 11:31:31 | 显示全部楼层
混金币,谢谢了
9# 2016-7-28 11:31:31 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2020-7-30 21:35:57 | 显示全部楼层
感谢楼主分享
10# 2020-7-30 21:35:57 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-1-29 13:51 , Processed in 0.059825 second(s), 11 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表