標籤:

Python小工具: 發個周報郵件給老闆

緣起: 新跳槽到一家公司, 沒想到第一個挑戰居然是每周都要發周報. 告訴老闆這周都幹了些什麼和下周準備幹什麼. 我記性不好, 常常忘事兒. 所以很多時候周報都會忘記發送. 於是, 就決定寫一個小工具好了.

Github: Weekday 小工具

提出目標:

  • 我想有一個工具能發郵件

目標細化

  • SMTP發送郵件, 用smtplib
  • 讀取配置文件

    • 發件人
    • 收件人
    • 抄送到哪些人
    • 我的賬戶, 密碼, 昵稱
  • 參數化命令行, 用argparse
  • 支持markdown to HTML

腦補使用方式

簡單使用方式

cmd -a "工作內容" -p # 列印successn

複雜使用

cmd -e -p # 激活vim, 然後:wq之後繼續cmd執行, 就向git commit -a, 不過要列印successn

忘了自己寫的程序怎麼用

cmd -h # 列印幫助信息n

設計程序

有一個臨時文件, 用來存放記錄. 每次發送郵件之後, 將臨時文件歸檔處理.

# 臨時文件, 存在~/.weekday/current.rpn[global]neditor = vimn[to]nemail = ncc = n[from]nemail = npassword = nnickname = n[SMTP]nhost = smtp.exmail.qq.comn

能在python腳本在執行時, 讀去到這個配置文件

# 獲取配置項示例nimport ConfigParsernconfig = ConfigParser.ConfigParser()nconfig.readfp(open(文件名))ndefaultEditor = confg.get(global, editor) # 返回vimn

可以解析在執行命令時傳入的參數

import argparsenparser = argparse.ArgumentParser(n description=Tell your leader what you did this week)n# define command line parametersnparser.add_argument(-v, --version,n action=store_true,n help=show the version information)nparser.add_argument(-e, --edit,n action=store_true,n help=open default editor for editing report)nargs = parser.parse_args()nprint argsn

準備發送郵件, 先把markdown轉成HTML, 然後使用smtplib發送郵件.

import smtplibnimport mistunenfrom email.mime.text import MIMETextncontent = mistune.markdown(content, escape=True, hard_wrap=True)nmsg = MIMEText(content, html, utf-8)nmsg[Subject] = u工作周報 %srn % datenmsg[From] = hFromnmsg[To] = hTonmsg[Cc] = hCcnsmtp = smtplib.SMTP(conf[host])nsmtp.login(conf[from_email], conf[password])nsmtp.sendmail(conf[from_email],n TO_ADDR + CC_ADDR,n msg.as_string())nsmtp.close()n

開始寫代碼

細分功能實現的關鍵代碼都已經整理好了. 現在只需要通過一串邏輯將她們聯繫起來. 看上去就能完成目標了.

# main.pyndef main():n args = loadArguments()n if args.version:n print DESCn if args.append:n append(args.append, tmpFileName)n // ... other code ...nif __name__ == __main__:n main()n

Let』s go

python main.py -a Hello -pn

最後只需要配合crontab工具, 就可以實現周期性定時發送了.

# crontab -lnSHELL=/bin/zshnPATH=/usr/local/binnHOME=/Users/qiuwein# run tasksn# minute hour day month week commandn0 18 * * 5 wp -pn

原文:Python小工具: 發個周報郵件給老闆

Good Goodbye-Linkin Park/Pusha T/Stormzy

推薦閱讀:

如何真正零基礎入門Python?(第一節)
VisPy 中文文檔:簡介與安裝
[2] Python變數
如何用100行Python代碼做出魔性聲控遊戲「八分音符醬」
爬蟲入門到精通-headers的詳細講解(If-modified-since)

TAG:Python |