試着寫成文檔格式~~~,寫着玩哈,别噴!
需求來源
疫情期間,公司要求每天上下班郵件打卡,由于重複性強,且内容基本不變,可以考慮用程式一鍵完成。
需求描述
- 能一鍵完成,明顯節省時間
- 主送人和抄送人固定為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!!!!!!!!!!")