天天看點

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!!!!!!!!!!")