CTEmail(Charts and Text Eamil)是一個傳送帶有圖片的郵件的小工具,這個圖片是郵件內容中顯示,不是新增在附件中,這個指令碼實現的比較簡單粗暴,不管長相醜陋,只能能解決實際問題就行。
專案地址dyike/CTEmail求star!!!
為什麼有CTEmail?
- 沒有一個不懶的程式設計師,做啥都想著寫個指令碼跑一下,跑個指令碼搶月餅,跑個指令碼...能用指令碼的幹嘛不用指令碼。每天的資料包表需要一個郵件指令碼傳送。
- 對接了各大廠商,每天每週每月都會往來郵件。報表用圖表的形式更簡單直觀的反饋資料,為什麼我們不在郵件中使用圖表。
- 各大廠商的郵件中圖表都是小姐姐手動製作,手動發出%>_<%,為什麼不跑一個指令碼。
- 如果解決上面的問題,是不是解放了小手。1) 用資料生成圖表,2) 將圖表拼接到郵件中發出。
這個小工具的初衷,解決實際問題還是很重要的。
哪些人需要這個工具?
- 產品同學,圖表是展示資料的最佳實踐!
- 運營同學,圖表是展示報表的最佳實踐!
- 技術同學,為了繼續懶下去!
- ...零程式設計基礎的同學都能使用【只要會科學上網就能解決一切】
說這些都是沒用,那就跟來做一下吧。
專案託管在github上,地址:dyike/CTEmail。記得來star喲!!!
怎麼使用?
首先,稍微知道怎麼操作Python,像我這種不會寫程式碼都能操作,你一定也可以。其次是到Plotly——這是一個視覺化資料的工具有點類似於HighCharts,不過支援多種語言,很強大了。先熟悉一下, 然後註冊一個賬號,後面會用到。本文著重資料生成圖表圖片。郵件服務配置檢視README
1st Step:
將專案clone下來,熟悉專案的結構,裡面不到兩百行程式碼,簡單粗暴。
git clone git@github.com:dyike/CTEmail.git
在send.py
檔案中配置自己的郵箱賬號,密碼,郵件標題,郵件模板路徑和傳送到的郵箱。
郵件模板的預設路徑是./content/
,會自動讀取該路徑下的html檔案。
from ctemail import CTEmail
e = CTEmail('Your email acount', 'Your password')
# " ./content/ 郵件檔案的路徑 "
e.send_email('Test Email Title', './content/', ['i@ityike.com'])
預設是配置QQ的STMP傳送服務(stmp.qq.com),埠是25。你也可以配置163.gmail等等,在初始化CTEmail()配置相應的配置即可。
2nd Step:
專案中提供了一個預設的模板,你可以根據你的實際需求定製的模板,content
資料夾下面還有圖片資源,我們生成的圖表的圖片資源也是在該資料夾下面。
需要注意的是,html檔案中,將img標籤用給包了一層,這樣只是為了能夠方便Python解析,替換。【ps:這裡可以瞭解一下Python傳送圖片郵件的實現,將圖片cid替換進來】參考廖雪峰老師的教程 這裡你可以不Care這些事。
模板中需要注意的一點:也是非常重要的一點就是:html中多個標籤需要換行。不換行就無法正確解析。
<a><EMAIL_IMG><img src="image1.png"></EMAIL_IMG></a>
<a><EMAIL_IMG><img src="image2.png"></EMAIL_IMG></a>
3th Step:
快要結束了,本文的卻重點來了,不要慌,也很簡單。就是使用Plotly,關於使用離線(本地)模式還是線上模式,看自己實際需求。我這裡說線上的。因為我用的是定時指令碼,我只能呼叫線上的API生成圖片儲存到本地content
資料夾下面。
-
安裝Plotly
pip install plotly
-
get_img.py
檔案,檔名可以重新命名,裡面需要的配置你的認證資訊credentials,資訊在https://plot.ly/settings/api
中檢視。有兩種方式:第一種如下
設定username和api_key。
import plotly
plotly.tools.set_credentials_file(username='DemoAccount', api_key='lr1c37zw81')
或者在安裝完成後,在~/.plotly/.credentials
檔案中配置你的賬號資訊。
看到的資訊大致如下:修改對應的即可。
{
"username": "DemoAccount",
"stream_ids": ["ylosqsyet5", "h2ct8btk1s", "oxz4fm883b"],
"api_key": "lr1c37zw81"
}
- 繼續
get_img.py
檔案
import plotly.plotly as py
import plotly.graph_objs as go
py.sign_in('Your account', 'API Token') # 注意:這裡是plotly網站的使用者名稱和密碼
trace = go.Bar(x=[2, 4, 6], y= [10, 12, 15])
data = [trace]
layout = go.Layout(title='A Simple Plot', width=800, height=640)
fig = go.Figure(data=data, layout=layout)
# 儲存圖片檔案的路徑
py.image.save_as(fig, filename='./content/image1.png')
# 拼接模板檔案
template = "<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body>" + "\n" + "<a><EMAIL_IMG><img src="image1.png"></EMAIL_IMG></a>" + "\n" + "<a><EMAIL_IMG><img src="image2.png"></EMAIL_IMG></a>" + "\n" + "</body></html>"
print template
注意上面拼接模板檔案內容的時候使用了換行符"\n"
,為什麼這樣使用,一簡單粗暴,二為了引起重視【這裡有坑】。
-
執行上面的指令碼檔案
python get_img.py > ./content/index.html
這樣就可以將模板檔案寫入到content
目錄下的index.html
-
執行
python send.py
郵件就可以傳送郵件,將上面的幾個命令寫入到shell指令碼中,更新方便快捷。 -
其他圖表的生成也可以參考官方文件的介紹。
4th Enjoy it!!!
放在最後的不是不重要,解決實際問題才是更重要,歡迎來CTEmailStar!!!
本作品採用《CC 協議》,轉載必須註明作者和本文連結