自動發送日報,騙過你的領導^-^


作為一個大(忘)忙(事)人(佬),每天寫日報這種事兒簡直就是種折磨。

而碰巧領導又讓你天天寫日報,這不是要了老命了嗎,所以咯,殫精竭慮之后,本人寫了個自動發送周報的程序,每天定時發送一封寫的聲色俱全的日報給領導。

切入正題吧。

程序是用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM