HTML Email 初嚐心得

HTML Email 是指在 Email 中使用 HTML 去排版顯示。

最近要替學生會寄信,覺得如果內容就幾行字實在是太無趣,打算弄的跟公司廣告信一樣美美的。Gmail 編輯時尚不支援 HTML,我打算大量寄信,因此也沒有打算使用 Gmail 去寄信,而是使用 Python smtplib 去完成。

我使用的是 BEE Free 這款線上免費使用的編輯軟體,畢竟 HTML Email 不支援很多 HTML 語法,時間緊迫就不打算自己刻了。這套軟體除了免登入,且只需要拉一拉就可以完成,對於不會寫程式的人也十分方便。

在編輯完成之後,可以打包下載,裡面會有一個 .html 檔和一個資料夾,裡面放有各種圖片素材,通常是使用內建的圖片才會有,因此我把這些圖片上傳到 Imgur,再連結到原本的 HTML 檔當中。

測試寄送 HTML 信件時,發現雖然我寄出了,但是沒收到信,但若使用較短的 HTML 信件則可以成功,找了很久發現是不支援 <body> 這個 tag,因此 HTML 內容就砍到剩 <table> 而已。不過還是失敗,顯示 \xe6 不是 unicode 什麼的,這時我確認了很多遍,確定內容都是 unicode 編碼,狀況依舊。在不斷的使用二分法確認出問題的段落後,我發現有個段落有時成功有時失敗,原因竟然是出在那行太長,於是把整份 HTML 貼到 online HTML beautify 之類的網站重新排版過後,果然就成功了。

測試雖然成功,但是在大量寄信時卻有漏信,查了 log 似乎是每次只能寄送 1000 封信,超過就會 drop,於是在寄信清單尾端的人都會沒收到信,mail.log 裡面也不會有紀錄。知道這個問題後就去交叉比對收信人跟 log 有哪些 diff,即可找出沒收到的名單再次寄信。我使用

$ sudo grep -irn "mail1.ncnu.edu.tw" /var/log/mail* | awk '{print $7}' | cut -c 5-32 | awk 'length($0)>27{print $0}'

去抓出哪些人有寄過,再寫 Python 腳本比對。

而朋友告訴我可以使用更方便快速的 pflogsumm 去分析,真是好工具!

$ sudo pflogsumm -d today /var/log/mail.log 

但目前還是沒有找到為何有 1000 封的限制,找到後會再補上來


comments powered by Disqus