大佬要我寫自動郵件報表系統

2022-02-20 02:36:16 字數 1860 閱讀 7976

最近接到乙個任務,將目前的郵件報表體系規整優化,格式嚴謹。

的確,前段時間為了省事,根據業務邏輯sql產生對應的csv格式的資料包表,用csvtotable工具將長長的csv轉化為頁面友好的html,由於產生的html帶有js,郵件正文不允許任何帶有js內容檔案充當正文,防止郵件木馬行為。所以我們採用了資料html作為附件,正文寫附件簡介的方案定時傳送相關報表。

然後,帶罪優化的任務來了。

理清思路,尋找問題。自動郵件報表系統是為了減少人工跑數、做excel、發郵件的重複工作,用指令碼定時執行相應任務。管理定時任務用crontab,組織執行用shell,業務跑數用sql,做excel用csvtotable,發郵件用python,一條龍服務!

但是,,問題來了,附件看起來像木馬,大佬想看正文,正文不能裝帶js的html,資料包表太長,全部羅列郵件長度可能撐爆。

經過再三思量,附件對業務人員是必要的,不能取消;正文大佬想看,那就彙總一版大佬需要的簡潔指數報表;正文不能帶js,那就用jinja2配和css來寫。

方案有了就開工!

根據業務邏輯得到乙份業務彙總sql,產生供正文使用的csv,利用 jinja2模板將csv資料填充到html頁面,形成正文html,渲染傳送!這樣一封既有大佬需要的彙總報表,又有業務人員需要的詳細資料的自動報表就出鍋了~

下面建議介紹一下,摸索過程中的細節:

1

#含有中文的csv解析

2import

sys3

import

csv4 base_path = os.getcwd()+』/'56

def unicode_csv_reader(csv_path, dialect=csv.excel, **kwargs):

7 with open(base_path +csv_path) as f:

8 csv_reader = csv.reader(f, dialect=dialect, **kwargs)

9for row in

csv_reader:

10yield [unicode(cell, '

utf-8

') for cell in row]

謹記:在使用jinja的時候需要在專案資料夾中生成乙個空的__init__.py,jinja模版放在templates資料夾路徑下,模板中針對**格式做了設定,表頭突出,第一列文字靠左,數字靠右,最後一行彙總加淺灰底紋。。。

1

from jinja2 import

template

2from jinja2 import

environment, packageloader

34 env = environment(loader=packageloader(『專案資料夾名』))

56 template = env.get_template('

template.html')

7 content = template.render(data=tables)

乙個學統計的程式設計師

喜歡coding

喜歡硬體

喜歡樹莓派

喜歡深度學習

喜歡你

Python實現自動寫郵件

上星期接到任務要完成乙個自動寫郵件的指令碼,基本功能是每兩小時執行一次程式跑出統計 並將統計 的summary傳送到領導的郵箱。由於公司是做數字貨幣的,每兩小時實時監測策略交易情況較為必要。下面來實現自動寫郵件的功能部分 import smtplib from email.mime.text imp...

朋友要我寫的。

呂秧秧熄燈後回到寢室,發現今晚的氣氛有點不對勁。平時這個時候宿舍裡的 5000 只鴨子早就已經煮開鍋了,但今天這個由 4個年級 8個專業組成的綜合寢室愣是連打呼嚕的聲音都沒有。呂秧秧正打算輕手輕腳地解決完個人衛生問題,只聽見宿舍老大 a君不緊不慢地開腔了 秧秧,聽說今天你們班陪舞去了?黑暗中看不清呂...

我要開始寫技術部落格了!

雖然大學畢業已經有半年多了,但是程式設計師這份工作才算是剛剛開始,之前工作的內容是sap bpc,雖然bpc對於企業應用十分適合,快捷簡單,但自己的興趣和目標都是進入網際網路行業,所以就要轉到做j a的專案,還好,12月,我進入了j a的專案。寫部落格的目的是記下工作中遇到的問題以及解決的方法,不懂...