python运维----检测主机IP ping不通则发邮件
1 #!/usr/bin/env python3 2 #coding: utf-8 3 4 #第一步:将对应的ping不通的p地址弄到noping.txt文件中 5 6 import commands 7 import os 8 import smtplib 9 import email.MIMEMultipart 10 import email.MIMEText 11 import email.MIMEBase 12 import mimetypes 13 import email.MIMEImage 1415 16 f = open("/lianxi/aochuanfei/ip.txt","r") 17 f_noping_ip = open("/lianxi/aochuanfei/noping.txt","w") 18 19 for ip in f.readlines(): 20 # 此处必须对IP地址进行处理--将ip地址转换为字符串,否则getstatusoutput函数里面不能传入变量 21 os.environ['ip'] = str(ip) 22 23 # 判断ping 一下IP 之后是否通的并返回状态的语句 24 (status, optput) = commands.getstatusoutput('ping -c 2 $ip') 25 26 # 判断返回的状态,如果为0说明ping得通,如果不为0则将对应的IP地址写入另外一个文件里面,然后通过右键发送 27 if status != 0: 28 # print status,'The ip was not ping tong is',ip 29 # 状态为0的的直接pass 30 f_noping_ip.write(str(ip)) 31 else: 32 # print status,'The ip was ping de tong is',ip 33 # 状态不为0的全部写入到noping.txt文件里面 34 pass 35 36 f.close() 37 f_noping_ip.close() 38 39 #第二步:将文件noping.txt通过邮件发送到对应邮箱 40 41 # 此步注意首先要到163上去注册一个邮箱帐号作为发件箱,而且要在客户端中设置验证 42 From = "aochuanfei@163.com" 43 To = "158505233239@qq.com,123456@qq.com" 44 file_name = "noping.txt" #附件名 45 46 server = smtplib.SMTP("smtp.163.com") 47 server.login("aochuanfei","aixocm123") #仅smtp服务器需要验证时 48 49 # 构造MIMEMultipart对象做为根容器 50 main_msg = email.MIMEMultipart.MIMEMultipart() 51 52 # 构造MIMEText对象做为邮件显示内容并附加到根容器 53 text_msg = email.MIMEText.MIMEText("请注意附件是注意内容",_charset="utf-8") 54 main_msg.attach(text_msg) 55 56 # 构造MIMEBase对象做为文件附件内容并附加到根容器 57 ctype,encoding = mimetypes.guess_type(file_name) 58 if ctype is None or encoding is not None: 59 ctype='application/octet-stream' 60 maintype,subtype = ctype.split('/',1) 61 file_msg=email.MIMEImage.MIMEImage(open(file_name,'rb').read(),subtype) 62 print ctype,encoding 63 64 ## 设置附件头 65 basename = os.path.basename(file_name) 66 file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改邮件头 67 main_msg.attach(file_msg) 68 69 # 设置根容器属性 70 main_msg['From'] = From 71 main_msg['To'] = To 72 main_msg['Subject'] = "ping不通的IP地址请看附件" 73 main_msg['Date'] = email.Utils.formatdate( ) 74 75 # 得到格式化后的完整文本 76 fullText = main_msg.as_string( ) 77 78 # 用smtp发送邮件 79 try: 80 server.sendmail(From, To.split(','), fullText) 81 finally: 82 server.quit()
请注意附件内容