当前位置:脚本大全 > > 正文

python定时推送邮件(python实现定时压缩指定文件夹发送邮件)

时间:2021-10-09 00:36:40类别:脚本大全

python定时推送邮件

python实现定时压缩指定文件夹发送邮件

工作中每天需要收集部门内的fr文件,发送给外部部门的同事帮忙上传,这么发了有大半年,昨天亮光一闪,为什么不做成自动化呢,于是用python实现了整个流程,今天体验了一下真是美滋滋。

代码如下

首先导入需要的包

  • ?
  • 1
  • 2
  • 3
  • 4
  • import win32com.client as win32
  • import datetime
  • import os
  • import zipfile
  • 定义三个函数,都是网上抄别的同学作业来的(侵删)

    邮箱用的是outlook

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • #压缩文件夹函数
  • def zip_ya(startdir,file_news):
  •  file_news = startdir +'.rar' # 压缩后文件夹的名字
  •  z = zipfile.zipfile(file_news,'w',zipfile.zip_deflated) #参数一:文件夹名
  •  for dirpath, dirnames, filenames in os.walk(startdir):
  •   fpath = dirpath.replace(startdir,'') #这一句很重要,不replace的话,就从根目录开始复制
  •   fpath = fpath and fpath + os.sep or ''#这句话理解我也点郁闷,实现当前文件夹以及包含的所有文件的压缩
  •   for filename in filenames:
  •    z.write(os.path.join(dirpath, filename),fpath+filename)
  •    print ('压缩成功')
  •  z.close()
  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • #创建文件夹函数
  • def mkdir(path):
  •  folder = os.path.exists(path)
  •  if not folder:    
  •   os.makedirs(path)  
  •   print "创建文件夹成功"
  •  else:
  •   print "文件夹已存在"
  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • #发送邮件函数
  • def sendmail(path):
  •  sub = '上传fr文件申请'
  •  body = '@xx,\r请帮忙上传fr文件,谢谢!'
  •  outlook = win32.dispatch('outlook.application')
  •  receiver = ['xxx@xx.com']
  •  ccreceiver = ['xxx@xx.com;xxx@xx.com;xxx@xx.com;xxx@xx.com']
  •  mail = outlook.createitem(0)
  •  mail.to = receiver[0]
  •  mail.cc = ccreceiver[0]
  •  mail.subject = sub.decode('utf-8')
  •  mail.body = body.decode('utf-8')
  •  mail.attachments.add(path)
  •  mail.send()
  • 文件夹名称为日期,每天脚本运行时,会新建一个明天的文件夹,并把昨天的压缩文件删除,所以先定义几个日期参数。

    这里碰到一个坑,文件路径含中文时,用这个函数os.path.exists()测试都是false,即没有被识别到,用unicode(todaypath,'utf-8')转为unicode后问题解决。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • #获取今天明天昨天的日期
  • today = datetime.date.today().strftime("%y%m%d")
  • tomorrow = (datetime.date.today()+ datetime.timedelta(days=1)).strftime("%y%m%d")
  • yesterday = (datetime.date.today()+ datetime.timedelta(days=-1)).strftime("%y%m%d")
  •  
  • #定义文件路径
  • path='//tcent.cn/dfs/26.xx事业部/10.xx市场营销中心/04.xxx部/02.xxx组/fr文件上传/'
  • todaypath=path + today
  • todayfile = path + today + '.rar'
  • tomorrowpath=path + tomorrow
  • utodaypath=unicode(todaypath,'utf-8')
  • utodayfile=unicode(todayfile,'utf-8')
  • utomorrowpath=unicode(tomorrowpath,'utf-8')
  •  
  • #定义昨天的压缩文件
  • yesterdayfile=path + yesterday + '.rar'
  • uyesterdayfile=unicode(yesterdayfile,'utf-8')
  •  
  • #计算今天文件夹下的文件个数
  • filenum = 0
  • for filename in os.listdir(utodaypath):
  •  filenum += 1
  •  
  • #创建明天的文件夹
  • mkdir(utomorrowpath)
  •  
  • #删除昨天的压缩文件
  • if os.path.exists(uyesterdayfile): # 如果文件存在
  •  os.remove(uyesterdayfile)
  • else:
  •  print('no such file:%s'%uyesterdayfile)
  • 在思考如何让脚本每天自动运行时,决定采用windows定时任务配置(因为没看懂python定时器..)但是windows只能设置为每天运行,实际上周末、节假日是不需要发送邮件的,而节假日补班时需要运行任务,可以在代码端进行控制。

    if条件那段就是先判断是否是空文件夹,如果没有文件就不用发了,如果有文件,再判断今天的日期,决定要不要发邮件。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • #获取今天是周几
  • weekoftoday=datetime.date.today().weekday()
  • #节假日列表
  • holiday=['20180924','20181001','20181002','20181003','20181004','20181005']
  • #补班列表
  • workday=['20180924','20180925']
  •  
  • #是否是周末
  • isweekend=(weekoftoday == 5 or weekoftoday == 6)
  • #是否是小长假
  • isholiday=today in holiday
  • #是否不要补班
  • isworkday=today not in workday
  • #文件夹是否为空
  • isnullfile=(filenum==0)
  •  
  • #判断是否要压缩文件并发送邮件
  • #周末、工作日放假的节假日、文件夹为空时不执行
  • #补班的周末例外
  • if isnullfile:
  •  pass
  • else:
  •  if ((isweekend or isholiday) and isworkday ):
  •   pass
  •  else:
  •    #压缩今天的文件夹
  •    zip_ya(utodaypath,today)
  •    #发送邮件
  •    sendmail(utodayfile)
  • 最后把这个python存成bat文件,去windows定时任务里配置即可。

  • ?
  • 1
  • 2
  • 3
  • @echo off
  • cd d:\myprograms\sendmail
  • start python sendmail.py
  • 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    原文链接:https://blog.csdn.net/madaokuma/article/details/81543973

    上一篇下一篇

    猜您喜欢

    热门推荐