优秀的编程知识分享平台

网站首页 > 技术文章 正文

创建win后台任务定时用Python代码发邮件

nanyue 2024-09-26 15:25:04 技术文章 5 ℃

1、先根据自己的需求完成邮件发送python任务测试

import docx
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.application import MIMEApplication
from apscheduler.schedulers.blocking import BlockingScheduler

from loguru import logger
import yaml
# 添加日志记录
logger.add("info.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}", level='INFO', rotation="500 MB", encoding='utf-8')
logger.add("error.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}", level='ERROR', rotation="500 MB", encoding='utf-8')

def sz_task():
    with open(r'配置yaml文件路径', encoding='utf-8') as emailFile:
        conf = yaml.load(emailFile)
    # 邮箱stmp域名
    host_server = conf['host_server']
    # 发送者邮箱
    sender_mail = conf['sender_mail']
    # 授权码
    pwd = conf['pwd']
    # 接收者邮箱列表
    receivers_mail = conf['receivers_mail']
    # 抄送者邮箱列表
    cc_mail = conf['cc_mail']   
    file = docx.Document(r"附件文件路径")
    title = 邮件标题
    mail_content = 邮件正文拼接
    msg = MIMEMultipart('mixed')
    msg['Subject'] = Header(title, 'utf-8')
    msg['From'] = sender_mail
    msg['To'] = ';'.join(receivers_mail)
    msg['Cc'] = ';'.join(cc_mail)   
    body = MIMEText(mail_content, 'plain')
    msg.attach(body)
    with open(r"附件文件路径", 'rb') as f:
        attachment = MIMEApplication(f.read())
    attachment.add_header('Content-Disposition', 'attachment', filename=附件文件名)
    msg.attach(attachment)

    try:
        smtp = SMTP_SSL(host_server, 465)
        smtp.set_debuglevel(1)
        smtp.login(sender_mail, pwd)
        smtp.sendmail(sender_mail, receivers_mail + cc_mail, msg.as_string()) 
        logger.info('发送成功')
    except:     
        logger.error("发送失败")

# 定时任务
def shedu_task():
    sheduler = BlockingScheduler()
    sheduler.add_job(sz_task, 'cron', hour=XX, minute=XX)
    try:
        sheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass

if __name__ == '__main__':
    shedu_task()

2、使用pyinstaller工具将py文件打包成exe文件

pip install pyinstaller

然后打包exe文件

pyinstaller -F XX.py

3、使用sc工具写成win服务,后台启动

打开powershell,输入以下

sc.exe create 服务名自定义 binPath="EXE文件路径"
net start 服务名自定义 //启动服务或者在任务管理起启用
sc.exe delete 服务名自定义 //删除后台服务(选)
最近发表
标签列表