利用邮件发送附件来实现一键巡检,附件是通过调用zabbix api生成的word和Excel

HTML部分:

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>自动巡检</title>
    <!-- 加入CSS样式 -->
</head>
<body>
    <form id="inspectionForm">
        <label for="email">邮箱地址:</label>
        <input type="email" id="email" name="email" required>

        <label for="subject">主题:</label>
        <input type="text" id="subject" name="subject" required>

        <label for="content">内容:</label>
        <textarea id="content" name="content" required></textarea>

        <button type="submit">一键巡检</button>
    </form>

    <div id="progressBar" style="display:none;">
        <!-- 进度条动画 -->
    </div>

    <script src="/static/script.js"></script>
</body>
</html>

JavaScript部分 (script.js):

javascript 复制代码
document.getElementById("inspectionForm").onsubmit = function(event) {
    event.preventDefault();
    var email = document.getElementById("email").value;
    var subject = document.getElementById("subject").value;
    var content = document.getElementById("content").value;

    // 显示进度条
    document.getElementById("progressBar").style.display = "block";

    // 发送AJAX请求到后端
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "/start_inspection", true);
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200) {
            alert("巡检已完成,邮件已发送");
            document.getElementById("progressBar").style.display = "none";
        }
    };
    xhr.send(JSON.stringify({email: email, subject: subject, content: content}));
};

后端(Python + Flask)

后端部分:

python 复制代码
from flask import Flask, request, jsonify, send_file
import subprocess

app = Flask(__name__)

@app.route('/')
def index():
    return send_file('bbb.html')

@app.route('/start_inspection', methods=['POST'])
def start_inspection():
    data = request.get_json()
    email = data['email']
    subject = data['subject']
    content = data['content']

    # 调用Python脚本
    subprocess.run(["python", "C:/Users/YK/Desktop/一键巡检/单独发送邮件包含固定附件已经成功.py", email, subject, content])

    return jsonify({"message": "Inspection completed and email sent"})

if __name__ == '__main__':
    app.run(debug=True)

单独发送邮件包含固定附件已经成功.py

脚本部分:

c 复制代码
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from email.header import Header
import sys
import os

def send_email(recipient, subject, body, attachment_paths):
    sender = "xunjianbot@163.com"
    password = "XXXXXXXXXXXXX"

    # 创建带有多个部分的邮件
    message = MIMEMultipart()
    message['From'] = Header(sender)
    message['To'] = Header(recipient)
    message['Subject'] = Header(subject)

    # 邮件正文
    message.attach(MIMEText(body, 'plain', 'utf-8'))

    # 添加附件
    for attachment_path in attachment_paths:
        part = MIMEBase('application', "octet-stream")
        try:
            with open(attachment_path, "rb") as file:
                part.set_payload(file.read())
            encoders.encode_base64(part)
            part.add_header('Content-Disposition', 'attachment', filename=os.path.basename(attachment_path))
            message.attach(part)
        except IOError:
            print(f"Could not attach file: {attachment_path}")
            return

    try:
        server = smtplib.SMTP_SSL("smtp.163.com", 465)
        server.login(sender, password)
        server.sendmail(sender, [recipient], message.as_string())
        server.quit()
        print("邮件发送成功")
    except smtplib.SMTPException as e:
        print("邮件发送失败", e)

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("Usage: python send_email.py <recipient> <subject> <body>")
        sys.exit(1)

    recipient = sys.argv[1]
    subject = sys.argv[2]
    body = sys.argv[3]

    # 附件文件路径列表
    attachment_paths = ["C:\\Users\\YK\\Desktop\\一键巡检\\aaaa.html",
                        "C:\\Users\\YK\\Desktop\\一键巡检\\获取zabbix版本.py"]

    send_email(recipient, subject, body, attachment_paths)
相关推荐
SRETalk5 天前
Zabbix、Prometheus、Grafana、Nightingale,四个监控如何选型?
zabbix·grafana·prometheus·nightingale
荣--6 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
Non-existent98713 天前
WPS批量清理单元格空白字符的4种方法-异常数字格式处理-实战
excel·wps
Channing Lewis13 天前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel
jarreyer13 天前
【数据分析绘图】excel绘图和bi工具区别
数据挖掘·数据分析·excel
chatexcel13 天前
ChatExcel Max使用教程:图片、PDF、网页与复杂Excel的一站式数据分析
数据分析·pdf·excel
cngkqy13 天前
excel从某一列中用match筛选匹配的数据
excel
qq_5469372713 天前
Excel批量转PDF_Word_图片,支持自动合并报表,效率翻倍。
pdf·word·excel
ai_coder_ai13 天前
在自动化脚本中操作excel文件
运维·自动化·excel
三千花灯13 天前
【Playwright】 自动化测试之参数化登录(Excel/CSV 数据源)
人工智能·机器学习·excel