zoukankan      html  css  js  c++  java
  • python实现服务器程序报警,以及解决自动发送邮件在linux系统中报错问题

    python实现服务器程序报警,以及解决自动发送邮件在linux系统中报错问题

    脚本实现监测服务器程序运行情况,运行出错报警,向相关人员发送邮件

    代码实现:

    1.自动发邮件类

    '''
    自动发送邮件接口
    '''
    
    import smtplib
    import email
    # 负责构造文本
    from email.mime.text import MIMEText
    # 负责构造图片
    from email.mime.image import MIMEImage
    # 负责将多个对象集合起来
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    
    
    class Auto_Send_Error_Mail:
        # 初始化该类
        def __init__(self, mail_host, mail_sender, mail_license, mail_receivers, body_content):
            self.mail_host = mail_host
            self.mail_sender = mail_sender
            self.mail_license = mail_license
            self.mail_receivers = mail_receivers
            self.body_content = body_content
    
        # 发送错误日志邮件
        def send_email(self):
            mm = MIMEMultipart('related')
            # 邮件主题
            subject_content = """油机爬虫错误日志"""
            # 设置发送者,注意严格遵守格式,里面邮箱为发件人邮箱
            mm["From"] = "sender_name<18055525400@163.com>"
            # 设置接受者,注意严格遵守格式,里面邮箱为接受者邮箱
            mm["To"] = "receiver_1_name<1165476886@qq.com>"
            # 设置邮件主题
            mm["Subject"] = Header(subject_content, 'utf-8')
    
            # 邮件正文内容
            # body_content = """你好,这是一个测试邮件!"""
            # 构造文本,参数1:正文内容,参数2:文本格式,参数3:编码方式
            message_text = MIMEText(self.body_content, "plain", "utf-8")
            # 向MIMEMultipart对象中添加文本对象
            mm.attach(message_text)
            '''
            这里特别强调:
            	在服务器linux系统上,检验会更加的严格,所以采用SMTP_SSL()
            	python3.7以上,smtplib模块文件做了修改
            	需要改写为:
            		端口25,ssl端口为465
            		smtplib.SMTP_SSL(self.mail_host).connect(self.mail_host, 465)
            	版本以下:
            		smtplib.SMTP_SSL().connect(self.mail_host, 465)
            '''
            # stp = smtplib.SMTP()
            stp = smtplib.SMTP_SSL(self.mail_host)
            # 设置发件人邮箱的域名和端口,端口地址为25,ssl端口为465
            stp.connect(self.mail_host, 465)
            # set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息
            stp.set_debuglevel(1)
            # 登录邮箱,传递参数1:邮箱地址,参数2:邮箱授权码
            stp.login(self.mail_sender, self.mail_license)
            # 发送邮件,传递参数1:发件人邮箱地址,参数2:收件人邮箱地址,参数3:把邮件内容格式改为str
            stp.sendmail(self.mail_sender, self.mail_receivers, mm.as_string())
            print("邮件发送成功")
            # 关闭SMTP对象
            stp.quit()
    
    # # SMTP服务器,这里使用163邮箱
    # mail_host = "smtp.163.com"
    # # 发件人邮箱
    # mail_sender = "xxxxxxxxx@163.com"
    # # 邮箱授权码,注意这里不是邮箱密码,如何获取邮箱授权码,请看本文最后教程
    # mail_license = "BGDAEEMWDFDGBRVQ"
    # # 收件人邮箱,可以为多个收件人
    # mail_receivers = ["xxxxxxx@qq.com"]
    #
    # mm = MIMEMultipart('related')
    
    # 邮件主题
    # subject_content = """Python邮件测试"""
    # # 设置发送者,注意严格遵守格式,里面邮箱为发件人邮箱
    # mm["From"] = "sender_name<xxxxxx@163.com>"
    # # 设置接受者,注意严格遵守格式,里面邮箱为接受者邮箱
    # mm["To"] = "receiver_1_name<xxxxx@qq.com>"
    # # 设置邮件主题
    # mm["Subject"] = Header(subject_content, 'utf-8')
    
    
    
    # 邮件正文内容
    # body_content = """你好,这是一个测试邮件!"""
    # # 构造文本,参数1:正文内容,参数2:文本格式,参数3:编码方式
    # message_text = MIMEText(body_content, "plain", "utf-8")
    # # 向MIMEMultipart对象中添加文本对象
    # mm.attach(message_text)
    
    # 二进制读取图片
    # image_data = open('a.jpg', 'rb')
    # # 设置读取获取的二进制数据
    # message_image = MIMEImage(image_data.read())
    # # 关闭刚才打开的文件
    # image_data.close()
    # # 添加图片文件到邮件信息当中去
    # mm.attach(message_image)
    
    # 构造附件
    # atta = MIMEText(open('recognition.log', 'r').read(), 'base64', 'utf-8')
    # # 设置附件信息
    # atta["Content-Disposition"] = 'attachment; filename="sample.log"'
    # # 添加附件到邮件信息当中去
    # mm.attach(atta)
    
    # 创建SMTP对象
    # stp = smtplib.SMTP()
    # # 设置发件人邮箱的域名和端口,端口地址为25
    # stp.connect(mail_host, 25)
    # # set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息
    # stp.set_debuglevel(1)
    # # 登录邮箱,传递参数1:邮箱地址,参数2:邮箱授权码
    # stp.login(mail_sender, mail_license)
    # # 发送邮件,传递参数1:发件人邮箱地址,参数2:收件人邮箱地址,参数3:把邮件内容格式改为str
    # stp.sendmail(mail_sender, mail_receivers, mm.as_string())
    # print("邮件发送成功")
    # # 关闭SMTP对象
    # stp.quit()
    
    

    2.日志模块

    # 日志模块
    def write_log(log_content):
        time_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        log_content1 = time_now + "---->" + log_content + os.linesep
        fp = open('recognition.log', 'a+')
        fp.write(log_content1)
        print('写入完成!')
        fp.close()
    

    3.程序运行模块

    write_log(str(e))
    with open('recognition.log', 'r') as f:
        data_cotetnt = f.read()
    print(data_cotetnt)
    # SMTP服务器,这里使用163邮箱
    mail_host = "smtp.163.com"
    # 发件人邮箱
    mail_sender = "xxxxxxx@163.com"
    # 邮箱授权码,注意这里不是邮箱密码,如何获取邮箱授权码,请看本文最后教程
    mail_license = "xxxxxxxx"
    # 收件人邮箱,可以为多个收件人
    mail_receivers = ["xxxxxxx@qq.com"]
    from auto_send_mail import Auto_Send_Error_Mail
    
    mail_obj = Auto_Send_Error_Mail(mail_host, mail_sender, mail_license, mail_receivers, data_cotetnt)
    mail_obj.send_email()
    
  • 相关阅读:
    Android Library projetcts cannot be exported.
    技术阅读记录(一)
    ASP.NET MVC Model绑定(五)
    Linux 高速操作IOport
    This version of the rendering library is more recent than your version of IntelliJ IDEA.
    WPF使用RoutedCommand自己定义命令
    AutoLayout具体解释+手把手实战
    JNI之——Can&#39;t load IA 32-bit .dll on a AMD 64-bit platform错误的解决
    9.Nexus私服安装配置
    Alcatraz:管理Xcode插件
  • 原文地址:https://www.cnblogs.com/godlover/p/14236858.html
Copyright © 2011-2022 走看看