作為一個大(忘)忙(事)人(佬),每天寫日報這種事兒簡直就是種折磨。
而碰巧領導又讓你天天寫日報,這不是要了老命了嗎,所以咯,殫精竭慮之后,本人寫了個自動發送周報的程序,每天定時發送一封寫的聲色俱全的日報給領導。
切入正題吧。
程序是用python寫的發送email的程序,使用shell寫的邏輯,使用linux服務器制定定時任務定時發送。
括弧 自己擁有服務器的土豪可以自己在服務器上裝mail命令,就不用自己寫郵件發送程序了,由於使用公共服務器,並沒有安裝程序的權限,所以自己用python寫了郵件發送程序。
整個程序的目錄結構是這樣的
drwxrwxr-x 2 * * 4096 Jul 28 17:17 ./ drwxr-xr-x 15 * * 4096 Jul 28 17:17 ../ -rw-rw-r-- 1 * * 288 Jul 28 12:10 rlist #工作內容列表,用來在自己忘了填充內容的時候隨機編造工作內容 -rw-rw-r-- 1 * * 0 Jul 28 13:00 send.log #執行log查看給領導發送的郵件內容,免得漏了陷 -rwxrwxr-x 1 * * 527 Jul 28 17:17 sendmail.sh* #手寫郵件發送程序 有mail程序的服務器可以不用這個文件 -rwxrwxr-x 1 * * 1082 Jul 28 17:05 send.py* #發送郵件的主程序 -rw-rw-r-- 1 * * 34 Jul 28 17:10 today #發送郵件的今日工作內容 -rw-rw-r-- 1 * * 93 Jul 28 17:14 tomorrow #發送郵件的昨日工作內容
rlist 就是個列表,里面隨便編上幾十個工作內容。越多越好,越詳細越好。
回顧代碼
優化后台功能
重構代碼
修改bug
檢查代碼性能
回顧代碼
優化后台功能
重構代碼
修改bug
檢查代碼性能
回顧代碼
優化后台功能
重構代碼
修改bug
檢查代碼性能
發送郵件的程序,可以使用mail命令代替
# -*- coding: utf-8 -*- from email import encoders from email.header import Header from email.mime.text import MIMEText from email.utils import parseaddr, formataddr import smtplib import argparse import time parser = argparse.ArgumentParser() parser.add_argument("content") args = parser.parse_args() times = time.strftime('%Y-%m-%d',time.localtime(time.time())) content = args.content def _format_addr(s): name, addr = parseaddr(s) return formataddr(( \ Header(name, 'utf-8').encode(), \ addr.encode('utf-8') if isinstance(addr, unicode) else addr)) from_addr = "***********" password = "*********" to_addr = "***********" smtp_server = "*********" msg = MIMEText(content, 'html', 'utf-8') msg['From'] = _format_addr(u'***** <%s>' % from_addr) msg['To'] = _format_addr(u'**** <%s>' % to_addr) msg['Subject'] = Header(u'【日報】'+times, 'utf-8').encode() server = smtplib.SMTP(smtp_server, 25) server.login(from_addr, password) server.sendmail(from_addr, [to_addr,"****抄送一份給自己****"], msg.as_string()) server.quit() ~
接下來就是整個程序的邏輯了
#! /bin/bash
# 隨機數生成方法 function rand(){ min=$1 max=$(($2-$min+1)) num=$(($RANDOM+1000000000)) #增加一個10位的數再求余 echo $(($num%$max+$min)) } echo "開始發送郵件"
#進入程序所在的目錄 cd /***/***/***/sendEmail
#接下來的兩行代碼目的是為了隨機一個半小時之內的休息時間,這樣每次領導收到日報的時間都不一樣,所以更難猜到是定時發送任務。 slt=`rand 1 1800 ` sleep $slt
#判斷明日目標是否存在,不存在的話從理由列表中隨機出一份 if [ -f tomorrow ];then to=$(cat tomorrow) else l=`rand 1 10` to=$(sed -n $l'p' rlist) echo $to > tomorrow fi
#從today中拿取今日目標 tod=$(cat today)
#將明日目標和今日目標合成一個內容 content="今日任務:<br/>"$tod"<br/>明日任務:<br/>"$to
#刪除今日目標(因為已經沒用啦) rm today
#將明日目標改名為今日目標(廢話 今天的明天不就是明天的今天嗎) mv tomorrow today
#發送郵件(如果用mail命令修改這一行就行啦) python2.7 send.py $content
#往log里面打印一條成功信息 echo $content "發送成功"
整體來說,程序的用法是,如果自己記得需要發日報這回事,就趕緊上服務器上寫一份明日工作計划放到tomorrow文件里面,如果忘了呢就是自動從rlist列表里面隨機出一份,然后隨機一個時間給領導發過去,讓領導覺得你是一個比較規律發日報的好同志!
最后的最后,設定一個定時器,讓這個程序每天定時執行就行了
shell里面輸入
crontab -e
然后添加這么一條信息就ok了
30 17 * * * /***********/sendEmail/sendmail.sh >> /**********/sendEmail/send.log 2>&1
