python 发邮件 脚本

来源:互联网 发布:线切割手工编程割直线 编辑:程序博客网 时间:2024/05/20 18:47
#!/usr/bin python#coding:UTF-8from email.header import Headerimport smtplibimport email.MIMEMultipart# import MIMEMultipartimport tracebackimport email.MIMEText# import MIMETextimport email.MIMEBase# import MIMEBaseimport os.pathimport sysimport timeimport mimetypesimport email.MIMEImage# import MIMEImageimport jsonclass sendmail:        """this is for sendmail"""        def __init__(self,email_addr,msg,headerr):                #命令 mail.py <1:发送方(回复地址)380968195@qq.com> <2:发送地址,多个以;隔开> <3:发送文件>                self.ReplyTo = email_addr                self.headerr = headerr                self.From = "%s<lingmain.lin@xxx.cn>" % Header(self.headerr,"utf-8")                self.To = email_addr                self.msg = msg #附件路劲和名称                self._init_server()        def _init_server(self):                #self.server = smtplib.SMTP("smail.xxx.cn",25)                self.server = smtplib.SMTP()                self.server.connect("smtp.exmail.qq.com")                print self.server                self.server.login("lingmain.lin@xxx.cn","passwd") #仅smtp服务器需要验证时                self._init_msg()        def _init_msg(self):                self.main_msg = email.MIMEMultipart.MIMEMultipart()# 构造MIMEMultipart对象做为根容器                self.text_msg = email.MIMEText.MIMEText(self.msg,_charset="utf-8")# 构造MIMEText对象做为邮件显示内容并附加到根容器                self.main_msg.attach(self.text_msg)                ctype,encoding = mimetypes.guess_type('')                if ctype is None or encoding is not None:                        ctype='application/octet-stream'# 构造MIMEBase对象做为文件附件内容并附加到根容器                maintype,subtype = ctype.split('/',1)                # 设置根容器属性                self.main_msg['From'] = self.From                self.main_msg['Reply-to'] = self.ReplyTo                self.main_msg['To'] = self.To                self.main_msg['Subject'] = time.strftime("%Y%m%d", time.localtime(time.time()))+self.headerr                self.main_msg['Date'] = email.Utils.formatdate(localtime = 1)                #main_msg['Bcc'] = To                # 得到格式化后的完整文本                self.fullText = self.main_msg.as_string()                # 用smtp发送邮件                try:                        self.server.sendmail(self.From, self.To.split(';'), self.fullText)                finally:                        self.server.quit()class monitor:"""this is for disk monitor"""def __init__(self):passdef get_machine_info(self):                                cmd = "/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d 'addr:'"                result = os.popen(cmd)                ip = result.read().strip()                return ip                def disk_monitor(self,maillist,threshold):cmd = "df -H | grep -o [0-9]*% | grep -o '[0-9]\+'"result = os.popen(cmd)                for item in result:                    if int(item.strip()) > int(threshold):                            print "disk is not enough!"                            file_date = time.strftime("%Y%m%d %H:%M:%S", time.localtime(time.time()-86400))                            sendmail(maillist,"机器 "+self.get_machine_info()+"  磁盘超过报警阈值 请及时进行处理,时间为%s" %(file_date),"磁盘监控报警")                def inode_monitor(self,maillist,threshold):            cmd = "df -i | grep -o [0-9]*% | grep -o '[0-9]\+'"result = os.popen(cmd)                for item in result:                    if int(item.strip()) > int(threshold):                            file_date = time.strftime("%Y%m%d %H:%M:%S", time.localtime(time.time()-86400))                            print "inode is not enough!"                            sendmail(maillist,"机器 "+self.get_machine_info()+"  inode超过报警阈值 请及时进行处理,时间为%s" %(file_date),"inode监控报警")        def crm_api_monitor(self,maillist):                            try:                    begin = time.time()                    cmd = 'curl -H "Content-type: application/json" -X POST -d \'{"query_where": [{"item": "crm__crm_basic_tags__vip_level","query": [{"op": "=","value": "1"},{"op": "=","value": "2"}]}]}\' http://localhost:8080/bigdata/crm/getGroupResCount'                    result = os.popen(cmd)                    tmp =  str(result.read())                    re = json.loads(tmp)                    file_date = time.strftime("%Y%m%d %H:%M:%S", time.localtime(time.time()-86400))                    if re['code'] == 200:                        print "success"                    else:                        sendmail(maillist,"机器 "+self.get_machine_info()+"crm 获取数量接口出现异常  请及时进行处理,时间为%s" %(file_date),"crm接口报警")                    end = time.time()                    delta = end - begin                    print type(delta)                    if delta > 1.5:                        print "chaognshi"                        sendmail(maillist,"机器 "+self.get_machine_info()+"crm 获取数量接口出现超时  请及时进行处理,时间为%s" %(file_date),"crm接口报警")                        except Exception,e:                    print "failure!"                    traceback.print_exc(e)                    sendmail(maillist,"机器 "+self.get_machine_info()+"crm 获取数量接口出现异常  请及时进行处理,时间为%s" %(file_date),"crm接口报警")        def monitor_file_is_empty_or_not(self,path,mailist):                try:                    filelist =  os.listdir(path)                    count = 0                    file_date = time.strftime("%Y%m%d %H:%M:%S", time.localtime(time.time()-86400))                    empty_count = 0                    alert = False                    now_date = time.strftime("%Y_%m_%d", time.localtime(time.time()))                    print now_date                    for item in filelist:                        if str(now_date) in item:                            count = count + 1                            if int(os.path.getsize(item)) == 0:                                alert = True                                empty_count = empty_count + 1                    if alert:                        print count,empty_count                        sendmail(maillist,"机器 "+self.get_machine_info()+" crm  ftp中的文件出现空文件异常,总文件个数为:%d空文件个数为:%d 请及时进行处理,时间为%s" %(count,empty_count,file_date),"crm空文件报警")                except Exception,e:                    print "failure!"                    traceback.print_exc(e)    if __name__ == "__main__":dm = monitor()              maillist = "lingmain.lin@xxx.cn;18513832042@139.com"        dm.monitor_file_is_empty_or_not('/home/ftpuser',maillist)        dm.disk_monitor(maillist,70)        dm.inode_monitor(maillist,70)

0 0
原创粉丝点击