最近做了一個小練習, 獲取服務的錯誤日志,並發送郵件給對應的負責人, 記錄一下代碼
# -*- coding: utf-8 -*- ''' 發送錯誤日志 ''' import os import smtplib import time import datetime from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.application import MIMEApplication def send_mail(to_list, sub, content): # to_list:收件人;sub:主題;content:郵件內容 mail_host = "smtp.jd.com" # 設置服務器 mail_user = "" # 用戶名 mail_pass = "" # 口令 mail_postfix = "" # 發件箱的后綴 me = "錯誤日志" + "<" + mail_user + "@" + mail_postfix + ">" # 這里的hello可以任意設置,收到信后,將按照設置顯示 msg = MIMEMultipart() msg['Subject'] = sub # 設置主題 msg['From'] = me msg['To'] = ";".join(to_list) # ---郵件正文--- part = MIMEText(open(objectdir, 'r').read(),_charset='gb2312') #將錯誤文件內容做為郵件正文內容 msg.attach(part) # txt類型附件 part = MIMEApplication(open(objectdir, 'rb').read()) part.add_header('Content-Disposition', 'attachment', filename="error_log.txt") msg.attach(part) try: s = smtplib.SMTP() s.connect(mail_host) # 連接smtp服務器 s.login(mail_user, mail_pass) # 登陸服務器 s.sendmail(me, to_list, msg.as_string()) # 發送郵件 s.close() return True except Exception, e: print str(e) return False #獲取錯誤日志內容 def getContent(resouce, final): f = open(resouce, 'rb') finalfile = open(final, 'wb') try: for line in f: if yes_date in line: if "ERROR" in line: # 按行讀取,如果該行包含“ERORR”字符串,則將該行寫入目標文件 finalfile.write(line) finally: f.close() finalfile.close() # 獲取昨天的時間,這塊可以任意改成自己需要的時間 def get_yesterday_date(): today = datetime.datetime.now() oneday = today - datetime.timedelta(days=1) yes_date = oneday.strftime("%Y-%m-%d") return yes_date if __name__ == '__main__': sourcedir = "D:/catalina.out" # 需要讀取的源文件路徑 objectdir = "D:/error_log.txt" # 存放的目標文件 mailto_list = ["dfffg@qq.com"]#收件人郵箱,可以發送存放多個 yes_date = get_yesterday_date() getContent(sourcedir, objectdir) if os.path.getsize(objectdir): if send_mail(mailto_list, "錯誤日志_"+yes_date,objectdir): print "發送成功" else: print "發送失敗" else: print "無錯誤日志,未發送郵件"