python实用脚本1:一键发送上下班打卡邮件

试着写成文档格式~~~,写着玩哈,别喷!

需求来源

疫情期间,公司要求每天上下班邮件打卡,由于重复性强,且内容基本不变,可以考虑用程序一键完成。

需求描述

  • 能一键完成,明显节省时间
  • 主送人和抄送人固定为XXX
  • 主题内容:年月日+部门+姓名+到/离岗,姓名由用户从命令行输入,其它内容要自动给出。例:2020年03月08日-软件开发部-寒尘-离岗
  • 正文内容固定为“上下班打卡”

实现逻辑

用户通过bat脚本来执行程序,首次使用,需要用姓名替换bat脚本中的name字符串。
outlook_auto.bat

python outlook_auto.py name
pause

python程序中可以读取sys.argv[1]获得用户姓名。将主送和抄送写成列表,然后用分号连接成字符串,方便以后扩展。通过time.strftime()获取当前时间,根据AM/PM判断是到岗还是离岗。由于strftime()方法貌似不支持中文,所以需要通过format()将时间格式化成年月日的形式,最后连接成需求所要求的主题样式。
所有变量设置好后,就可以调用pywin32模块中的Windows API,实现一个函数去发送邮件,后续内容参考连接:Python调用outlook发送邮件,发送给多人、抄送给多人并带上附件

具体代码

outlook_auto.py

#! python3
import win32com.client as win32
import time, sys

name = sys.argv[1] #通过命令行参数输入姓名

addressee_list = ['[email protected]',
                  '[email protected]',
                  '[email protected]']
addressee_str = ';'.join(addressee_list) #主送人列表

cc_list = ['[email protected]',
           '[email protected]',
           '[email protected]']
cc_str = ';'.join(cc_list) #抄送人列表

time_str = time.strftime("%Y{}%m{}%d{}%p",time.localtime())
time_subgect = time_str.format('年','月','日')
stat = '到岗' if time_str[-2:] == 'AM' else '离岗'
subgect_str = time_subgect[:-2] + '-软件开发部-' + name + '-' + stat #主题内容

content = '上下班打卡' #正文内容

def outlook():
    olook = win32.Dispatch("outlook.Application")
    mail = olook.CreateItem(0)
    mail.To = addressee_str
    mail.CC = cc_str
    mail.Subject = subgect_str
    mail.Body = content
    mail.Send()

if __name__ == '__main__':
    outlook()
    print("send email ok!!!!!!!!!!")

你可能感兴趣的:(python实用脚本,python)