编程技术文章分享与教程

网站首页 > 技术文章 正文

采集交换机配置文件后发送到指定邮箱

hmc789 2024-11-08 19:43:51 技术文章 1 ℃

背景:之前做了一个自动化备份的python脚本,但是每次是否备份总不放心得上去看下,所有就想加一个功能,就是备份完将备份后的脚本通过email方式发送到公司邮箱(也可以发送给其他领导的邮箱)

一、需要哪些模块

1、netmiko

2、os

3、time

4、smtp

5、email

除了netmiko是外置模块外,其他都是python内置的模块

二、上脚本

from netmiko import ConnectHandler
import time
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import os
from pathlib import Path

# 获取当前时间的年月日
directory_time = time.strftime("%Y-%m-%d", time.localtime())


# 创建文件
# 创建实时时间文件
def mkdir():
    folder = os.path.exists(directory_time)
    if not folder:  # 判断是否存在文件夹如果不存在则创建为文件夹
        os.makedirs(directory_time)


def save_config():
    # 通过这个函数可以切割各个部分然后通过循环赋值给每一个变量
    f = open('ip.txt', 'r', encoding='UTF-8')
    line = 'A'
    print('正在采集设备配置,请稍等......')
    while line != "":
        line = f.readline()
        file_name = time.strftime("%H:%M:%S", time.localtime())
        while line:
            a = line.split()
            ip = a[:1]
            username = a[1:2]
            password = a[2:3]
            port = a[3:4]
            line = f.readline()
            device = ConnectHandler(device_type='huawei',
                                    ip=ip[0],
                                    username=username[0],
                                    password=password[0],
                                    port=port[0])
            output = device.send_command('dis cu')
            file = open('%s/%s-%s.txt' % (directory_time, ip[0], file_name), 'w', encoding='UTF-8')
            print(output, file=file, flush=True)
            # print(output, file=sys.stdout)
            print('已采集%s' % ip[0])
            device.disconnect()
        f.close()
        print('已全部采集成')

def send_mail():
    fromaddr = 'xxxxx@qq.com'
    toaddr = 'xxxx@xxx.com'
    # mixed代表着email是携带附件的
    msg = MIMEMultipart('mixed')
    msg['From'] = fromaddr
    msg['To'] = toaddr
    msg['Subject'] = '网络设备配置文件备份'
    # 正文部分,也可以写某某领导,交换机配置备份见附件,我这是测试使用
    body = '附件见底部'
    msg.attach(MIMEText(body, 'plain'))

    # 遍历文件夹的文件
    path = os.getcwd() + '/' + directory_time
    p = Path(path)
    Filelist = p.glob('**/*.*')

    # 逐个添加至msg消息中,并且添加文件信息
    for file in Filelist:
        f = str(file)
        # 通过/分行去最后一个字符作为文件名
        filename = f.split('/')[-1]
        print(filename)
        # 所有文件都可以这样去发送
        csv_file = open(file, 'rb').read()
        csv = MIMEApplication(csv_file)
        csv.add_header('Content-Disposition', 'attachment', filename=filename)
        msg.attach(csv)

    server = smtplib.SMTP('smtp.qq.com', 25)
    server.ehlo()
    server.starttls()
    server.ehlo()
    # kradlaldcybabdfb 为鉴权码
    server.login(fromaddr, 'kradlaldcybabdfb')
    text = msg.as_string()
    server.sendmail(fromaddr, toaddr, text)


if __name__ == '__main__':
    mkdir()
    save_config()
    send_mail()

思路大概就是:

1、通过当天日期为文件夹备份,那么先有一个函数来创建文件夹

2、遍历ip.txt文件,得到username、password、port、ip参数,示例如下

192.168.1.1  python  admin  22
192.168.1.2  python  admin  22
192.168.1.3  python  admin  8244

3、当全部文件备份好后储存在文件夹内在做邮件发送

4、邮件发送时通过遍历文件夹内容,添加到发送的附件中发送给对应的邮箱

注:发送邮箱需要开SMTP协议,然后通过鉴权码发送。怎么开SMTP协议自行百度


收到的邮件如下

相对应的文字可以自行修改

如果觉得对你的工作或者学习有帮助点个赞吧



标签列表
最新留言