HFSS 仿真完成后通过邮件和弹窗通知--python脚本

通过windows弹窗和和邮件提醒,通知HFSS开发者仿真分析已经结束,快回去工作吧!

(支持优化分析和单个普通分析。)


窗口提示

邮箱提示(这里我用的qq邮箱)

你需要的前置准备

  • 在电脑上安装python
  • 支持smpt的邮箱 (绝大部分邮箱都支持,但是你需要确认在邮箱设置中已经开启)
  • 获取 "邮箱授权码",(通常是很长的一串字符,一开始我愚蠢的认为只有四位数字)

如何运行脚本

修改关键参数

工程文件路径信息

file_path = 'D:/Ansoft22Project/WaveGuideFilter.aedt' //工程文件具体位置
directory_path = 'D:/Ansoft22Project/WaveGuideFilter.aedtresults/filter.results'//工程文件仿真结果储存的文件夹

邮箱参数(不用邮箱通知不改也行,就发不出去罢了)

  • sender_email = "1********@qq.com" //your send mail
  • receiver_email = "*******@qq.com" (mail who you send
  • smtp_server = "smtp.qq.com"//chose your mail server
  • smtp_port = 465 # QQ 邮箱 SMTP 使用的是 465 端口
  • smtp_user = sender_email
  • smtp_password = "***************" # 这里填写你的授权码

脚本运行后,会自动检测仿真的开始与结束。仿真完成后会弹窗和发邮件给开发者。


顺带一提 ,如果不想要邮件通知,可以把这句话注释掉 “send_mail()”😒

import os
import time
import smtplib #邮件通知模块
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import tkinter as tk
from tkinter import messagebox
# 邮件发送方和接收方
sender_email = "************@qq.com"
receiver_email = "***********@qq.com"  # 收件人邮箱
subject = "HFSS仿真完成!"
body = "这是通过 Python 发送的通知邮件。"

# 邮箱授权码
smtp_server = "smtp.qq.com"
smtp_port = 465  # QQ 邮箱 SMTP 使用的是 465 端口
smtp_user = sender_email
smtp_password = "***zz***qttjef*"  # 这里填写你的授权码

# 创建邮件内容
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = subject

# 邮件正文内容
msg.attach(MIMEText(body, 'plain'))

def send_mail():# 连接 SMTP 服务器并发送邮件
    try:
        with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
            server.login(smtp_user, smtp_password)
            server.sendmail(sender_email, receiver_email, msg.as_string())
            print("邮件发送成功!")
    except smtplib.SMTPAuthenticationError as e:
        print(f"邮件认证失败: {e}")
    except smtplib.SMTPConnectError as e:
        print(f"邮件连接失败: {e}")
    except smtplib.SMTPException as e:
        print("\^o^/")
        #print(f"SMTP 发生错误: {e}")
    except Exception as e:
        print(f"邮件发送失败: {e}")

#通知窗口初始化
root = tk.Tk()
root.withdraw()  # 隐藏主窗口
root.attributes("-topmost", True)#使消息漂浮在所有窗口最上方

#文件信息初始化
file_path = 'D:/Ansoft22Project/WaveGuideFilter.aedt'
file_mtime = os.path.getmtime(file_path)
pre_file_time = file_mtime #储存开始的文件修改时间

directory_path = 'D:/Ansoft22Project/WaveGuideFilter.aedtresults/filter.results'
def count_files_in_directory(directory_path):
    # 获取文件夹内所有文件和文件夹的列表
    files = [f for f in os.listdir(directory_path) if os.path.isfile(os.path.join(directory_path, f))]
    return len(files)
file_count = count_files_in_directory(directory_path)
pre_file_count = file_count

readable_time = time.ctime(file_mtime)
print(f"文件 {file_path} 最后修改时间: {readable_time}")
print(f"文件夹内文件的数量:{file_count}")
while True:
    time.sleep(10)
    file_mtime = os.path.getmtime(file_path)#重新获得最新修改时间
    
    if file_mtime != pre_file_time:
        print("HFSS分析中。。。")
        while True:
            pre_file_count = file_count
            time.sleep(20)
            #print("等了20秒了")
            file_count = count_files_in_directory(directory_path)
            #print("file_count = "+ str(file_count))
            #print("prefile_count =" + str(pre_file_count))
            if file_count == pre_file_count:#如果文件数量不再变化
                pre_file_count = file_count# 更新基准文件数量
                pre_file_time = file_mtime#更新基准修改时间
                messagebox.showinfo("提示", "HFSS仿真完成!")
                send_mail()
                break;

            
    else:
       print("程序运行中")

posted on 2025-01-13 23:40  EasternCabbage  阅读(91)  评论(0)    收藏  举报

导航